Bitrix24: Blogs

Bitrix24 Blogs

  • Integración rápida de Bitrix24: Webhook Street Magic

    Ana Paula Céspedes 30/01/2017 07:00:33 pm
    Como bien sabrá, Bitrix24 incluye una extensa API REST que puede utilizarse para extender las funciones de Bitrix24 e integrar sistemas de terceros. Los métodos REST pueden crear y editar entidades y tareas de CRM, enviar mensajes al flujo de actividad, de hecho, pueden hacer casi cualquier cosa.

    Sin embargo, hasta hace poco tiempo, la vida de un desarrollador REST aparentemente indiferente estaba perturbada por la amenaza de una sombra del protocolo OAuth 2.0, el cual había sido un requisito, y uno difícil de implementar. A pesar de que ha sido un buen tiempo desde que se introdujo, y está actualmente en uso por las principales empresas de software, muchos desarrolladores siguen siendo tímidos cuando el protocolo debe ser implementado desde cero. Otra desventaja es que tendría que actualizar muestras de autenticación de vez en cuando si su requisito es un intercambio de datos continúo automatizado y sin supervisión de Bitrix24.

    A veces todo lo que se le pide a un desarrollador es conectar una instancia Bitrix24 a un sistema de terceros conocido, o simplemente a un simple formulario web. Digamos que el jefe sufre de un terrible dolor de cabeza después de una fiesta en el patio de ayer y, de repente, quiere tener informes de almacén publicado en la secuencia de actividades. ¿Qué dice usted?

    Con gusto, caballeros. Acabamos de hacer su vida más fácil: un nuevo sistema de integración de Bitrix24 fue ideado, y es solo un ajuste perfecto para soluciones internas. Estoy hablando de los conocidos webhooks. Bueno, conocido puede ser una palabra equivocada de hecho: son famosos por hacer al desarrollador feliz!


    Con los webhooks puede aprovechar los métodos REST API mientras ahorra la molestia de tener que implementar OAuth 2.0.



    Webhooks entrantes

    Bien, veamos cómo lo hacemos. Supongamos que tenemos un formulario de comentarios en nuestro sitio web que todavía no está utilizando los formularios de Bitrix24 CRM por alguna razón, en lugar de ir por ello, somos lo suficientemente tercos como para dejar el formulario tal cual mientras agregamos trucos y whatnots que un nuevo prospecto se creará en Bitrix24 cuando se envíe el formulario.

    Todo lo que hacemos es abrir Aplicaciones> Webhooks y hacer clic en "Añadir webhook":

    e9e8cd905154c18f31cb334abe290af4.png

    Seleccione "Webhook entrante" el tipo webhook (nuestra intención es conectarse a Bitrix24 externamente, ¿correcto?) Y he aquí - aquí viene el formulario de parámetros webhook.

    Introduzca el nombre y la descripción del webhook y seleccione el módulo cuyo acceso es necesario. En este caso necesitamos acceso al módulo de CRM porque queremos agregar prospectos.

    b6c6d20dc469181e0642c2dc796c214a.png

    Clic en "Guardar". El formulario muestra ahora alguna nueva información:


    da71e8e284ed6b4037e64d781bb4c7ea.png
    Ahora vamos a ver qué incluye esta URL.

    1.Este es el ID de usuario cuyos permisos de acceso se aplicarán al webhook. Obviamente, la URL especifica el ID de un usuario que acaba de crear el webhook.
    2. El código webhook. Manténgalo seguro. No publique un selfie con este código en Instagram.3A método REST para ejecutar. El método de "perfil" es sólo un ejemplo; Vamos a usar crm.lead.add en su lugar.
    3. Todo lo que tenemos que hacer ahora es llamar a la URL adecuada - la que la máquina inteligente ha creado para nosotros, solo tiene que incluir un nombre de método necesario. Eso es todo al respecto.

    Y aquí es cómo se puede hacer:


    <?
    /**
    * Write data to log file.
    *
    * @param mixed $data
    * @param string $title
    *
    * @return bool
    */
    function writeToLog($data, $title = '') {
    $log = "\n------------------------\n";
    $log .= date("Y.m.d G:i:s") . "\n";
    $log .= (strlen($title) > 0 ? $title : 'DEBUG') . "\n";
    $log .= print_r($data, 1);
    $log .= "\n------------------------\n";
    file_put_contents(getcwd() . '/hook.log', $log, FILE_APPEND);
    return true;
    }
    $defaults = array('first_name' => '', 'last_name' => '', 'phone' => '', 'email' => '');
    if (array_key_exists('saved', $_REQUEST)) {
    $defaults = $_REQUEST;
    writeToLog($_REQUEST, 'webform');
    $queryUrl = 'https://restapi.bitrix24.ru/rest/1/31uhq2q855fk1foj/crm.lead.add.json';
    $queryData = http_build_query(array(
    'fields' => array(
    "TITLE" => $_REQUEST['first_name'].' '.$_REQUEST['last_name'],
    "NAME" => $_REQUEST['first_name'],
    "LAST_NAME" => $_REQUEST['last_name'],
    "STATUS_ID" => "NEW",
    "OPENED" => "Y",
    "ASSIGNED_BY_ID" => 1,
    "PHONE" => array(array("VALUE" => $_REQUEST['phone'], "VALUE_TYPE" => "WORK" )),
    "EMAIL" => array(array("VALUE" => $_REQUEST['email'], "VALUE_TYPE" => "WORK" )),
    ),
    'params' => array("REGISTER_SONET_EVENT" => "Y")
    ));
    $curl = curl_init();
    curl_setopt_array($curl, array(
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_POST => 1,
    CURLOPT_HEADER => 0,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $queryUrl,
    CURLOPT_POSTFIELDS => $queryData,
    ));
    $result = curl_exec($curl);
    curl_close($curl);
    $result = json_decode($result, 1);
    writeToLog($result, 'webform result');
    if (array_key_exists('error', $result)) echo "Error saving lead: ".$result['error_description']."<br/>";
    }
    ?>
    <fo rm method="post" action="">
       Name: <input type="text" name="first_name" size="15" value="<?=$defaults['first_name']?>"><br/>
       Last name: <input type="text" name="last_name" size="15" value="<?=$defaults['last_name']?>"><br/>
       Phone: <input type="phone" name="phone" value="<?=$defaults['phone']?>"><br/>
       E-mail: <input type="email" name="email" value="<?=$defaults['email']?>"><br/>
       <input type="hidden" name="saved" value="yes">
       <input type="submit" value="send"></form>  

    Ahora, algunas notas importantes. En primer lugar, nunca haga que sus formularios web sean feos e inseguros como el del ejemplo J. A continuación, casi todos los enfoques de integración de Bitrix24 se reducen a estos sencillos pasos: crear una URL; Rellene la variable $ queryData (lea más aquí); Inicializar curl e invocar Bitrix24 utilizando una llamada a curl_exec. Procese la respuesta JSON - y todo el mundo está feliz. Incluso la molestia de tu jefe ha terminado, perdona el juego de palabras.


    Vamos a resumir los tres sencillos pasos:

    1. Agregue un webhook y utilice el formulario de parámetros de webhook para obtener una nueva URL caliente y crepitante, directamente en su Bitrix24.
    2. Reemplace el nombre del método REST predeterminado por el que desee. Cree la matriz de datos de consulta.
    3. Llame a Bitrix24 utilizando la URL.

    Si desea probar su nueva idea, abra el formulario, rellene los campos y envíe el formulario. Ahora navegue por su Bitrix24 para ver el nuevo prospecto añadido. Eso es todo, usted puede tomar un break y relajarse.

    Webhooks salientes

    ¡Ahora que usted ha tenido su R & R, usted estará encantado de saber que no es toda la diversión que usted puede conseguir. La integración puede provenir de ambos lados. A veces se necesita desesperadamente enviar alguna información a un sistema de terceros siempre que se produzca un cambio en Bitrix24. Por ejemplo, cree un pedido en su ERP personalizado cuando un representante de ventas actualice una negociación de Bitrix24 con un determinado estado.

    Una vez más, abra Aplicaciones> Webhooks pero haga clic en "Webhook salientes" esta vez. Esto traerá una forma diferente porque no tenemos que crear una clave entrante. Sin embargo, tenemos que seleccionar un evento que, cuando este activado, llamará a nuestro comerciante.


    7fdbdba23d67515e4a0b7edbc6f977d1.png


    Especifique la dirección URL del comerciante, otorgue al nuevo webhook un nombre claro y agradable y, lo más importante, seleccione el evento ONCRMDEALUPDATE. Envíe el formulario para crear una clave de autenticación que utilizaremos en nuestro controlador para comprobar si se llama desde Bitrix24 y la llamada es auténtica. Esto puede no ser la medida de seguridad a prueba de balas, pero será suficiente en la mayoría de los casos.


    734e0437b0b817f110c704f7f9c4e3b0.png


    El comerciante de este ejemplo hace el trabajo más simple posible: registra todo lo transmitido a él.


    <?
    print_r($_REQUEST);
    writeToLog($_REQUEST, 'incoming');
    /**
    * Write data to log file.
    *
    * @param mixed $data
    * @param string $title
    *
    * @return bool
    */
    function writeToLog($data, $title = '') {
    $log = "\n------------------------\n";
    $log .= date("Y.m.d G:i:s") . "\n";
    $log .= (strlen($title) > 0 ? $title : 'DEBUG') . "\n";
    $log .= print_r($data, 1);
    $log .= "\n------------------------\n";
    file_put_contents(getcwd() . '/hook.log', $log, FILE_APPEND);
    return true;
    }  
    Ahora, si abrimos una negociación para editar y guardar cambios, veremos una entrada en el registro:

    2017.01.17 12:58:29
    incoming
    Array
    (
       [event] => ONCRMDEALUPDATE
       [data] => Array
        (
         [FIELDS] => Array
             (
              [ID] => 662
             )
        )
       [ts] => ххх
       [auth] => Array
        (
         [domain] => ххх.bitrix24.com
         [client_endpoint] => https://ххх.bitrix24.com/rest/
         [server_endpoint] => https://oauth.bitrix.info/rest/
         [member_id] => ххх
         [application_token] => ххх
        )
    )
    ¿Viste lo sencillo que era obtener información sobre el cambio de oferta? Ahora podemos usar el webhook entrante discutido anteriormente para obtener detalles de la negociación llamando al método crm.deal.get.


    ¡Aquí está el Cyborgs!

    ¡Hemos encontrado a los webhooks simples y útiles que dimos un paso aún más grande para que sea compatible con la automatización CRM!

    Abra el formulario de preferencias de CRM, seleccione Automatización en el menú y haga clic en negociaciones.

    c4addfe1b6ff2d1fcb168d5deb765296.png


    Para mantener las cosas simples, usaremos el mismo controlador de webhook de salida que hemos creado anteriormente. Sin embargo, lo llamaremos explícitamente.

    Haga clic en "Configurar reglas de automatización" y agregue una regla a cualquier etapa de la negociación mientras selecciona "Webhook" como tipo de regla. Una vez seleccionado el tipo de regla, se seguirá un nuevo formulario en el que se especificará la dirección URL del controlador y los parámetros a transmitir.


    e9f1242dbfd21204f3cb5ead24dce549.png



    Como ejemplo, vamos a alimentar al comerciante con la etapa de negociación:

    7181f5dda2dfc3f9db5a92ab56aa4ff9.png
    Guarde todo (no todo el mundo en este momento, simplemente haga clic en "Guardar" en los formularios). Abra cualquier prospecto y cambie su escenario a aquel para el que hemos creado una regla. Esto activará el webhook de salida y el comerciante agregará datos de transacción al registro:


    2017.01.17 12:58:27
    incoming
    Array
    (
       [status] => New
       [document_id] => Array
        (
         [0] => crm
         [1] => CCrmDocumentDeal
         [2] => DEAL_662
        )
       [auth] => Array
        (
         [domain] => xxx.bitrix24.com
         [client_endpoint] => https://xxx.bitrix24.com/rest/
         [server_endpoint] => https://oauth.bitrix.info/rest/
         [member_id] => xxx
        )
    )
    ¿No es hermoso?
2 000 000+
organizaciones
ya están utilizando Bitrix24