/** * A simple set of functions to check our version 1.0 update service. * * @package WordPress * @since 2.3.0 */ /** * Check WordPress version against the newest version. * * The WordPress version, PHP version, and Locale is sent. Checks against the * WordPress server at api.wordpress.org server. Will only check if WordPress * isn't installing. * * @since 2.3.0 * @uses $wp_version Used to check against the newest WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @param bool $force_check Whether to bypass the transient cache and force a fresh update check. Defaults to false, true if $extra_stats is set. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_version_check( $extra_stats = array(), $force_check = false ) { if ( defined('WP_INSTALLING') ) return; global $wpdb, $wp_local_package; include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $php_version = phpversion(); $current = get_site_transient( 'update_core' ); $translations = wp_get_installed_translations( 'core' ); // Invalidate the transient when $wp_version changes if ( is_object( $current ) && $wp_version != $current->version_checked ) $current = false; if ( ! is_object($current) ) { $current = new stdClass; $current->updates = array(); $current->version_checked = $wp_version; } if ( ! empty( $extra_stats ) ) $force_check = true; // Wait 60 seconds between multiple version check requests $timeout = 60; $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( ! $force_check && $time_not_changed ) return false; $locale = get_locale(); /** * Filter the locale requested for WordPress core translations. * * @since 2.8.0 * * @param string $locale Current locale. */ $locale = apply_filters( 'core_version_check_locale', $locale ); // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_core', $current ); if ( method_exists( $wpdb, 'db_version' ) ) $mysql_version = preg_replace('/[^0-9.].*/', '', $wpdb->db_version()); else $mysql_version = 'N/A'; if ( is_multisite() ) { $user_count = get_user_count(); $num_blogs = get_blog_count(); $wp_install = network_site_url(); $multisite_enabled = 1; } else { $user_count = count_users(); $user_count = $user_count['total_users']; $multisite_enabled = 0; $num_blogs = 1; $wp_install = home_url( '/' ); } $query = array( 'version' => $wp_version, 'php' => $php_version, 'locale' => $locale, 'mysql' => $mysql_version, 'local_package' => isset( $wp_local_package ) ? $wp_local_package : '', 'blogs' => $num_blogs, 'users' => $user_count, 'multisite_enabled' => $multisite_enabled, ); $post_body = array( 'translations' => json_encode( $translations ), ); if ( is_array( $extra_stats ) ) $post_body = array_merge( $post_body, $extra_stats ); $url = $http_url = 'http://api.wordpress.org/core/version-check/1.7/?' . http_build_query( $query, null, '&' ); if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $options = array( 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), 'headers' => array( 'wp_install' => $wp_install, 'wp_blog' => home_url( '/' ) ), 'body' => $post_body, ); $response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) return false; $body = trim( wp_remote_retrieve_body( $response ) ); $body = json_decode( $body, true ); if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) return false; $offers = $body['offers']; foreach ( $offers as &$offer ) { foreach ( $offer as $offer_key => $value ) { if ( 'packages' == $offer_key ) $offer['packages'] = (object) array_intersect_key( array_map( 'esc_url', $offer['packages'] ), array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial', 'rollback' ), '' ) ); elseif ( 'download' == $offer_key ) $offer['download'] = esc_url( $value ); else $offer[ $offer_key ] = esc_html( $value ); } $offer = (object) array_intersect_key( $offer, array_fill_keys( array( 'response', 'download', 'locale', 'packages', 'current', 'version', 'php_version', 'mysql_version', 'new_bundled', 'partial_version', 'notify_email', 'support_email' ), '' ) ); } $updates = new stdClass(); $updates->updates = $offers; $updates->last_checked = time(); $updates->version_checked = $wp_version; if ( isset( $body['translations'] ) ) $updates->translations = $body['translations']; set_site_transient( 'update_core', $updates ); if ( ! empty( $body['ttl'] ) ) { $ttl = (int) $body['ttl']; if ( $ttl && ( time() + $ttl < wp_next_scheduled( 'wp_version_check' ) ) ) { // Queue an event to re-run the update check in $ttl seconds. wp_schedule_single_event( time() + $ttl, 'wp_version_check' ); } } // Trigger a background updates check if running non-interactively, and we weren't called from the update handler. if ( defined( 'DOING_CRON' ) && DOING_CRON && ! doing_action( 'wp_maybe_auto_update' ) ) { do_action( 'wp_maybe_auto_update' ); } } /** * Check plugin versions against the latest versions hosted on WordPress.org. * * The WordPress version, PHP version, and Locale is sent along with a list of * all plugins installed. Checks against the WordPress server at * api.wordpress.org. Will only check if WordPress isn't installing. * * @since 2.3.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_plugins( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined('WP_INSTALLING') ) return false; // If running blog-side, bail unless we've not checked in the last 12 hours if ( !function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); $plugins = get_plugins(); $translations = wp_get_installed_translations( 'plugins' ); $active = get_option( 'active_plugins', array() ); $current = get_site_transient( 'update_plugins' ); if ( ! is_object($current) ) $current = new stdClass; $new_option = new stdClass; $new_option->last_checked = time(); // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-plugins.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $plugin_changed = false; foreach ( $plugins as $file => $p ) { $new_option->checked[ $file ] = $p['Version']; if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) ) $plugin_changed = true; } if ( isset ( $current->response ) && is_array( $current->response ) ) { foreach ( $current->response as $plugin_file => $update_details ) { if ( ! isset($plugins[ $plugin_file ]) ) { $plugin_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $plugin_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_plugins', $current ); $to_send = compact( 'plugins', 'active' ); $locales = array( get_locale() ); /** * Filter the locales requested for plugin translations. * * @since 3.7.0 * * @param array $locales Plugin locale. Default is current locale of the site. */ $locales = apply_filters( 'plugins_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 plugins $timeout = 3 + (int) ( count( $plugins ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'plugins' => json_encode( $to_send ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), 'all' => json_encode( true ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/plugins/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); foreach ( $response['plugins'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); foreach ( $response['no_update'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); if ( is_array( $response ) ) { $new_option->response = $response['plugins']; $new_option->translations = $response['translations']; // TODO: Perhaps better to store no_update in a separate transient with an expiry? $new_option->no_update = $response['no_update']; } else { $new_option->response = array(); $new_option->translations = array(); $new_option->no_update = array(); } set_site_transient( 'update_plugins', $new_option ); } /** * Check theme versions against the latest versions hosted on WordPress.org. * * A list of all themes installed in sent to WP. Checks against the * WordPress server at api.wordpress.org. Will only check if WordPress isn't * installing. * * @since 2.7.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_themes( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined( 'WP_INSTALLING' ) ) return false; $installed_themes = wp_get_themes(); $translations = wp_get_installed_translations( 'themes' ); $last_update = get_site_transient( 'update_themes' ); if ( ! is_object($last_update) ) $last_update = new stdClass; $themes = $checked = $request = array(); // Put slug of current theme into request. $request['active'] = get_option( 'stylesheet' ); foreach ( $installed_themes as $theme ) { $checked[ $theme->get_stylesheet() ] = $theme->get('Version'); $themes[ $theme->get_stylesheet() ] = array( 'Name' => $theme->get('Name'), 'Title' => $theme->get('Name'), 'Version' => $theme->get('Version'), 'Author' => $theme->get('Author'), 'Author URI' => $theme->get('AuthorURI'), 'Template' => $theme->get_template(), 'Stylesheet' => $theme->get_stylesheet(), ); } // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-themes.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time() - $last_update->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $theme_changed = false; foreach ( $checked as $slug => $v ) { if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) ) $theme_changed = true; } if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) { foreach ( $last_update->response as $slug => $update_details ) { if ( ! isset($checked[ $slug ]) ) { $theme_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $theme_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $last_update->last_checked = time(); set_site_transient( 'update_themes', $last_update ); $request['themes'] = $themes; $locales = array( get_locale() ); /** * Filter the locales requested for theme translations. * * @since 3.7.0 * * @param array $locales Theme locale. Default is current locale of the site. */ $locales = apply_filters( 'themes_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 themes $timeout = 3 + (int) ( count( $themes ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'themes' => json_encode( $request ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/themes/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $new_update = new stdClass; $new_update->last_checked = time(); $new_update->checked = $checked; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); if ( is_array( $response ) ) { $new_update->response = $response['themes']; $new_update->translations = $response['translations']; } set_site_transient( 'update_themes', $new_update ); } /** * Performs WordPress automatic background updates. * * @since 3.7.0 */ function wp_maybe_auto_update() { include_once( ABSPATH . '/wp-admin/includes/admin.php' ); include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ); $upgrader = new WP_Automatic_Updater; $upgrader->run(); } /** * Retrieves a list of all language updates available. * * @since 3.7.0 */ function wp_get_translation_updates() { $updates = array(); $transients = array( 'update_core' => 'core', 'update_plugins' => 'plugin', 'update_themes' => 'theme' ); foreach ( $transients as $transient => $type ) { $transient = get_site_transient( $transient ); if ( empty( $transient->translations ) ) continue; foreach ( $transient->translations as $translation ) { $updates[] = (object) $translation; } } return $updates; } /** * Collect counts and UI strings for available updates * * @since 3.3.0 * * @return array */ function wp_get_update_data() { $counts = array( 'plugins' => 0, 'themes' => 0, 'wordpress' => 0, 'translations' => 0 ); if ( $plugins = current_user_can( 'update_plugins' ) ) { $update_plugins = get_site_transient( 'update_plugins' ); if ( ! empty( $update_plugins->response ) ) $counts['plugins'] = count( $update_plugins->response ); } if ( $themes = current_user_can( 'update_themes' ) ) { $update_themes = get_site_transient( 'update_themes' ); if ( ! empty( $update_themes->response ) ) $counts['themes'] = count( $update_themes->response ); } if ( ( $core = current_user_can( 'update_core' ) ) && function_exists( 'get_core_updates' ) ) { $update_wordpress = get_core_updates( array('dismissed' => false) ); if ( ! empty( $update_wordpress ) && ! in_array( $update_wordpress[0]->response, array('development', 'latest') ) && current_user_can('update_core') ) $counts['wordpress'] = 1; } if ( ( $core || $plugins || $themes ) && wp_get_translation_updates() ) $counts['translations'] = 1; $counts['total'] = $counts['plugins'] + $counts['themes'] + $counts['wordpress'] + $counts['translations']; $titles = array(); if ( $counts['wordpress'] ) $titles['wordpress'] = sprintf( __( '%d WordPress Update'), $counts['wordpress'] ); if ( $counts['plugins'] ) $titles['plugins'] = sprintf( _n( '%d Plugin Update', '%d Plugin Updates', $counts['plugins'] ), $counts['plugins'] ); if ( $counts['themes'] ) $titles['themes'] = sprintf( _n( '%d Theme Update', '%d Theme Updates', $counts['themes'] ), $counts['themes'] ); if ( $counts['translations'] ) $titles['translations'] = __( 'Translation Updates' ); $update_title = $titles ? esc_attr( implode( ', ', $titles ) ) : ''; $update_data = array( 'counts' => $counts, 'title' => $update_title ); /** * Filter the returned array of update data for plugins, themes, and WordPress core. * * @since 3.5.0 * * @param array $update_data { * Fetched update data. * * @type array $counts An array of counts for available plugin, theme, and WordPress updates. * @type string $update_title Titles of available updates. * } * @param array $titles An array of update counts and UI strings for available updates. */ return apply_filters( 'wp_get_update_data', $update_data, $titles ); } function _maybe_update_core() { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $current = get_site_transient( 'update_core' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) && isset( $current->version_checked ) && $current->version_checked == $wp_version ) return; wp_version_check(); } /** * Check the last time plugins were run before checking plugin versions. * * This might have been backported to WordPress 2.6.1 for performance reasons. * This is used for the wp-admin to check only so often instead of every page * load. * * @since 2.7.0 * @access private */ function _maybe_update_plugins() { $current = get_site_transient( 'update_plugins' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_plugins(); } /** * Check themes versions only after a duration of time. * * This is for performance reasons to make sure that on the theme version * checker is not run on every page load. * * @since 2.7.0 * @access private */ function _maybe_update_themes() { $current = get_site_transient( 'update_themes' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_themes(); } /** * Schedule core, theme, and plugin update checks. * * @since 3.1.0 */ function wp_schedule_update_checks() { if ( !wp_next_scheduled('wp_version_check') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_version_check'); if ( !wp_next_scheduled('wp_update_plugins') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_plugins'); if ( !wp_next_scheduled('wp_update_themes') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_themes'); if ( ( wp_next_scheduled( 'wp_maybe_auto_update' ) > ( time() + HOUR_IN_SECONDS ) ) && ! defined('WP_INSTALLING') ) wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); } if ( ( ! is_main_site() && ! is_network_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) return; add_action( 'admin_init', '_maybe_update_core' ); add_action( 'wp_version_check', 'wp_version_check' ); add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 ); add_action( 'load-plugins.php', 'wp_update_plugins' ); add_action( 'load-update.php', 'wp_update_plugins' ); add_action( 'load-update-core.php', 'wp_update_plugins' ); add_action( 'admin_init', '_maybe_update_plugins' ); add_action( 'wp_update_plugins', 'wp_update_plugins' ); add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 ); add_action( 'load-themes.php', 'wp_update_themes' ); add_action( 'load-update.php', 'wp_update_themes' ); add_action( 'load-update-core.php', 'wp_update_themes' ); add_action( 'admin_init', '_maybe_update_themes' ); add_action( 'wp_update_themes', 'wp_update_themes' ); add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 ); add_action( 'wp_maybe_auto_update', 'wp_maybe_auto_update' ); add_action('init', 'wp_schedule_update_checks'); El Parlamento ya está en Twitter ¿y ahora qué?SesiónDeControl.com
Arrow

Ya en Twitter, ¿y ahora qué?


1
Miguel Ángel Gonzalo

Archivero-Bibliotecario de las Cortes Generales de España. Webmaster de www.congreso.es


Escrito el 4 de diciembre de 2012 a las 8:49 | Clasificado en Actualidad

La presencia del Parlamento en las redes sociales se incrementa y son necesarios planes de actuación y guías de uso para mejorar la presencia digital. Gestión de las discrepancias, gobernanza, monitorización de la comunidad y escucha activa son contenidos a tener muy en cuenta.

Presencia de Parlamentos autonómicos en redes sociales (Fuente: jotacelada.com)
Presencia de Parlamentos autonómicos en redes sociales (Fuente: jotacelada.com)

Desde hace tiempo se viene produciendo la apertura de perfiles institucionales de parlamentos en las redes sociales. Sólo en el caso del Estado español, según los datos de @jotacelada, “12 de los 17 parlamentos autonómicos tienen abierta al menos una cuenta en una red social”. Estas cuentas registraban hasta julio de 2012 cerca de 25.000 seguidores y habían enviado hasta esa fecha cerca de 20.000 tuits. El estudio, en consonancia con los que viene realizando @dalvarez37, señala un incremento constante del número de tuits y de las interacciones. Además, el pasado 12 de noviembre, el Senado abrió @senadoesp que cuenta hoy con cerca de 1.200 seguidores y aprobó su propia guía de uso de la red.

Ciertamente a los datos cuantitativos cabe añadir alguna pregunta cualitativa sobre cómo están gestionando los parlamentos su identidad digital. En la red hay un gran interés por la política y, por extensión, se habla mucho sobre el Parlamento, sobre el Congreso de los Diputados y sobre el Senado.

¿Tienen los parlamentos una voz propia y diferenciada de los parlamentarios y los grupos en el mundo digital? En esta pregunta radica una de las claves del éxito de una estrategia de presencia en redes sociales. Está claro que la simple presencia en una red social no va a solucionar los problemas de reputación, lo que antes se llamaba “tener buena imagen”. Puede ser criticable y, seguramente, así se hará desde diversos sectores, empezar por abrir una cuenta en Twitter antes que otras medidas de transparencia u otras acciones de comunicación en el plano de lo no digital.

[document file=”http://openingparliament.s3.amazonaws.com/docs/declaration/1.0/spanish.pdf” width=”275″ height=”350″]

Lo importante, sin embargo, es comprender que la actuación digital debe encuadrarse en un plan amplio de comunicación y que en una correcta gestión de las redes sociales estriba la posibilidad de transformar lo que ahora se pueden percibir como amenazas en oportunidades para tener una democracia de más calidad. Los ejes de la actuación de un parlamento en una red social pasan por escuchar, responder, preguntar y compartir. La presencia ha de ser activa y no ser otro canal más de emisión de los contenidos ya existentes en la web. Como señala Cesar Calderón,  tener un perfil en Twitter por sí solo no es Ogov es marketing. Por ello, la presencia en un red debe entenderse como ir introduciendo en la organización los necesarios cambios para hacer posible una evolución hacia una Declaración sobre transparencia parlamento abierto.

Dicha presencia en los lugares en los que se desarrolla la conversación es recomendable. Además de estar, es necesario tomar decisiones acerca de las razones para  actuar y cómo gestionar dicha presencia. La planificación resulta imprescindible y, para ello, es de suma utilidad contar con una guía de uso de redes sociales.

Hay que citar la ‘Guía de usos y estilo en las Redes Sociales del Gobierno Vasco’, en la que tuvo mucho que decir Cristina Juesas (@maripuchi) y personas del gran equipo de Irekia (@nagodelos), cuya segunda edición es de junio de 2012. Igualmente está la ‘Guía de usos y estilo en las redes sociales de la Generalitat de Cataluña’ cuya quinta edición es de febrero de 2012.

[document file=”http://bideoak2.euskadi.net/redesyblogs/guia_usos_y_estilos_en_rrss_del_ejgv/guia_de_usos_y_estilo_en_las_redes_sociales_del_gobierno_vasco_v2.pdf” width=”295″ height=”350″] [document file=”http://www.gencat.cat/web/meugencat/documents/guia_usos_xarxa_es.pdf” width=”295″ height=”350″]

Mucho más reciente es la ‘Guía de usos y estilo en las redes sociales de la Junta de Castilla y León’ de noviembre de 2012. Todas las guías recogen recomendaciones para mejorar la presencia en la mayoría de las redes sociales conocidas. En el ámbito estrictamente parlamentario son muy relevantes las ‘Directrices para el uso de los medios sociales de comunicación por los parlamentos’, de la Unión Interparlamentaria, cuyo borrador se difundió en octubre de 2012 y está en fase de recogida de observaciones. En la guía se tocan los puntos fundamentales a tener en cuenta para gestionar una cuenta parlamentaria en una red social: la planificación, las estrategias de interacción, gestión de las discrepancias, procedimiento con los abusos, estrategias de respuesta en casos de crisis y, naturalmente, además de la propia gestión está la monitorización y análisis de la comunidad.

[document file=”http://www.jcyl.es/junta/cp/Maquetacion_guia.pdf” width=”295″ height=”350″] [document file=”http://www.ipu.org/splz-e/asgp12/guidelines-s.pdf” width=”295″ height=”350″]

Bidireccionalidad

Si se centra el foco en un perfil institucional en Twitter, a diferencia de un perfil político o de partido, el objetivo ha de estar ligado tanto a la promoción de los contenidos institucionales como en estar al servicio de la ciudadanía para ser vía de consulta y atención. En todas las redes sociales es esencial la bidireccionalidad, pero en Twitter hay que prestar especial cuidado a la interacción con especial preparación para dar respuestas que contribuyan al fortalecimiento institucional. Puede ser de gran utilidad para salir al paso rápidamente de informaciones falsas o erróneas que, desgraciadamente, también están presentes en la red.

La experiencia de @senadoesp indica que los contenidos pueden referirse a un abanico amplio de temas tales como: la agenda, órdenes del día, convocatorias, notas de prensa, emisiones en directo, incorporación de nuevos parlamentarios, dar a conocer sus direcciones de correo, Facebook o Twitter, votaciones, eventos, convocatorias diversas.

Un aspecto que por desconocido no es menos importante es la gestión de las listas en Twitter. Desde un perfil institucional se puede realizar un servicio útil a la comunidad de usuarios poniendo a disposición unas listas verificadas y actualizadas de parlamentarios en Twitter, incluso segmentadas por grupos parlamentarios. Este es uno de los muchos usos que pueden tener las listas.

En la guía de uso de la red social deben figurar las indicaciones acerca de a quién seguir. El objetivo de la presencia en una red social es establecer comunicación con la comunidad y, en este sentido, es claro que una política de seguimiento a perfiles influyentes puede ayudar a incrementar la visibilidad del perfil.

Sin embargo, es en la manera de dar respuestas a menciones recibidas donde el perfil institucional se la juega. Es la acción más sensible porque supone hablar “en nombre de” la institución y, por tanto, no se deben emitir opiniones que no tengan un contenido institucional, que supongan posición partidista o que supongan un menoscabo de la imparcialidad que debe mantener un perfil en Twitter de estas características.

Las distintas guías han intentado establecer procedimientos de actuación medidos para responder ante los distintos tipos de interacciones posibles. En la medida en que desde el equipo de gestión de la cuenta se puedan establecer protocolos coherentes será más sencillo que el ciudadano se sienta escuchado de forma activa y no mecánica. Así pues, en dichas guías se suele distinguir entre preguntas y dudas, solicitudes de mejoras, críticas y, por último, la siempre difícil cuestión de los insultos y actividad de ‘trolls’.

Formulación de preguntas y dudas

Las preguntas y dudas formuladas con un tono correcto se deben contestar en un plazo de tiempo razonable (no superior a 48 horas en cualquier caso) en la medida que estén en el ámbito de competencias de la institución y su política de información y atención al ciudadano.

En la contestación de la pregunta, la inclusión de enlaces a la web funcionará como un complemento efectivo. Puede haber cuestiones que estén en un ámbito más particular y que se puedan redirigir hacia un mensaje directo.

Solicitudes de mejora

El campo de las sugerencias y solicitudes de mejora es uno en los que la colaboración se ve más fructífera. En las guías se destaca que, en cualquier caso, se agradecerá el comentario y se acusará recibo.

Es conveniente realizar un seguimiento de las mismas ya que, si finalmente la sugerencia es atendida, habrá que comunicar el resultado.

Críticas

En los casos de crítica constructiva, la opción más adecuada, según la totalidad de las guías, es contestar públicamente para mostrar que se da respuesta a las opiniones de las personas usuarias. El uso de Twitter en una institución puede funcionar bien para responder a las críticas sobre temas políticos o parlamentarios que contengan datos falsos o erróneos. En los casos en los que sea necesario proporcionar más información, se puede remitir al interlocutor a una dirección de correo electrónico donde poder expresarse con más extensión.

Si la crítica es negativa se puede buscar una manera adecuada para responder de forma constructiva. No así, por ejemplo, en lo relativo a insultos o descalificaciones, respecto a los cuales las guías de uso recomiendan ignorarlos para no provocar retroalimentación. No parece recomendable realizar acciones de bloqueo o denuncia por ‘spam’ salvo que la reiteración o el abuso haga muy dificultosa la gestión de dichas menciones.

El problema en los perfiles institucionales viene cuando la crítica excede del ámbito de competencias de la propia gestión de la cuenta. Por ejemplo, ¿cómo responder a una crítica que señala que el Parlamento no representa a los ciudadanos? Es una crítica negativa a la institución pero que,  probablemente, deba corresponder contestar a los partidos políticos o grupos parlamentarios. Por tanto, no cabe esperar que el personal que está llevando la gestión (ya sean funcionarios u otro tipo de personal) intervenga directamente en respuesta a comentarios concretos de índole política.

Gobernanza, medición y evaluación

En la gestión de las redes sociales es importante que los equipos encargados de su mantenimiento estén conectados con los órganos políticos de dirección de la Cámara que deberán encargarse de la supervisión frecuente de la comunicación realizada precisamente para garantizar su carácter institucional y que se están cumpliendo los objetivos marcados.

Como es sabido, todo lo que no se evalúa se devalúa. En este sentido, en la gestión de redes sociales es necesario contar con un cuadro de mando de indicadores cuantitativos y cualitativos que permita ver cómo está funcionando el perfil en diversos aspectos.

Monitorización y escucha activa

Por último, aunque no por ello menos importante, es conveniente incluir en la planificación de actividades ciertos recursos para realizar una monitorización amplia de lo que se está hablando en las redes sociales, aunque no provenga directamente de una mención o una interacción, para poder anticiparse a las necesidades e inquietudes de la sociedad presente en las redes.

Una correcta “escucha activa” puede permitir que el Parlamento mejore los contenidos de su web, amplíe contenidos que están siendo demandados en conversaciones diversas e, incluso, permita anticiparse a posibles críticas aportando información útil y contrastada.

Los votantes dicen...
  1. Excelente artículo y muy útil la recopilación de guías de estilo. Me parece un acierto contar con indicadores cualitativos en la monitorización, además de los cuantitativos habituales. Por si sirve de inspiración, os paso la (humilde) tabla de indicadores cualitativos que elaboré a partir de declaraciones de ciudadanos en un estudio que creo que ya conoces, Miguel Ángel, sobre políticos y redes sociales. Quizá no todos esos indicadores sean aplicables a perfiles institucionales pero, de todos modos, creo que al definirlos es útil contar con técnicas propias de la antropología, como entrevistas o grupos de debate. Es decir, haciendo que los cuidadanos puedan dar su opinión más allá de una encuesta o 140 caracteres, para que surjan valoraciones que pueden escapar a las herramientas automáticas de monitorización. Espero que de algún modo os sea útil. Un saludo.

Comparte tu punto de vista

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>