Hook Formit. CallTouch + MODX

Всем привет!

Поступила задача на интеграцию форм с calltouch.ru/



На сайте есть информация Как подключить заявки с сайта к отслеживанию Calltouch

Мы же выберем решение в виде хука для Formit.

1. Переходим в раздел Передача данных через API, Webhooks в ЛК Calltouch и активируем пункт Передавать данные по API. Ниже указанные данные для интеграции. Пока не закрываем окно, нам понадобится информацияю

2. Создаем сниппет sendCallTouch и в него добавляем следующий код:

<?php
$call_value = (int) $_COOKIE['_ct_session_id']; // ID сессии Calltouch, полученный из cookie

if (empty($call_value)) { return true; }

$ct_node_id = 99; // Вместо 99 подставляем номер Сервера
$ct_site_id = XXX; // Вместо XXX подставляем ID личного кабинета

$url = 'https://api-node' . $ct_node_id . '.calltouch.ru/calls-service/RestAPI/requests/' . $ct_site_id . '/register/';

$values = $hook->getValues();

// Тут указываем соответствие ключ - поле в форме 
$fields = [
  'fio' => $values['name'],
  'comment' => $values['text'] ?: $values['package'],
  'email' => $values['email'],
  'phoneNumber' => $values['phone'],
  'subject' => 'Заявка с сайта',
  'sessionId' => $call_value,
];

// $modx->log(modX::LOG_LEVEL_ERROR, print_r($fields, 1));

try  {
  $curl = curl_init();
  
  curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_POST => 1,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => http_build_query($fields),
    CURLOPT_HTTPHEADER => [
      "Content-Type: application/x-www-form-urlencoded",
      "charset: utf-8"
    ],
  ]);
  
  $response = curl_exec($curl);
  $modx->log(modX::LOG_LEVEL_INFO, $response);
} catch (Exception $e) {
  $modx->log(modX::LOG_LEVEL_ERROR, $e);
}

return true;

3. Сохраняем

4. Переходим к форме, которую будем интегрировать. В поле с указанием хуков добавляем наш новый хук:

&hooks=`sendCallTouch,sendlead,FormItSaveForm,email`

5. Тестим


6. Профит
Иван Бочкарев
16 сентября 2020, 13:07
modx.pro
7
1 838
+16
Поблагодарить автора Отправить деньги

Комментарии: 6

Николай Савин
16 сентября 2020, 14:44
+1
Тот случай когда скрипт как скрипт, ничего необычного. Но все лайкнули пост, просто потому что Иван — красавчик!
Евгений
23 сентября 2020, 18:05
0
возможно ваш код под ramex crm както почикать? или это только под CT?
в документации есть такое

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://api.crmramex.ru/treatment/create?token=8ec41300ba033a1eadb7008113c73f60734e08cefb7a993f68d2551f15715b93");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, "lastname={lastname}&firstname={firstname}&phone={phone}&email={email}&comment={comment}&date_treatment={date_treatment}&address={address}&office_id={office_id}&source_id={source_id}");

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

и

<?php
/**
 * Created by PhpStorm.
 * User: ramex
 * Date: 26.07.16
 * Time: 14:11
 */

namespace common\components;


class RamexFormApi
{
    protected $host = 'https://api.crmramex.ru';
    protected $token;

    public function __construct($token)
    {
        $this->token = $token;
    }

    /**
     * Активные офисы дилера
     */
    public function offices()
    {
        return $this->send('treatment/offices');
    }

    /**
     * Источники обращения
     */
    public function sources()
    {
        return $this->send('treatment/sources');
    }

    /**
     * Добавляет обращение
     * @param $params
     * @return mixed
     */
    public function create($params)
    {
        return $this->send('treatment/create', $params);
    }

    protected function send($method, $params = null)
    {
        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, $this->combineUrl($method));
        curl_setopt($curl, CURLOPT_TIMEOUT, 60);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

        if ($params !== null && is_array($params)) {
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
        }

        $result = curl_exec($curl);
        curl_close($curl);

        return json_decode($result);
    }

    /**
     * @param $method
     * @return string
     */
    protected function combineUrl($method)
    {
        return "{$this->host}/{$method}?token={$this->token}";
    }
}
    Николай Савин
    23 сентября 2020, 19:51
    0
    Можно. Чего ж нельзя то. Иван написал универсальный пример. Чуть чуть доработать под схему вашей CRM и будет счастье
    Дмитрий
    27 марта 2023, 12:05
    0
    Подскажите пожалуйста где взять номер Сервера
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6