Twilio fax - Как управлять статусными ответами в Wordpress на PHP?

Я хочу отправлять факсы и управлять ими только с помощью PHP (без JavaScript или cron, если возможно) через Twilio из моего linux + Apache + сайт Wordpress. (Разработка ведется на сайте Wordpress через мой локальный хост с использованием ngrok.)

Мне удалось создать страницу Wordpress (шаблон) для отправки факсов с помощью API факсов Twilio. Однако после отправки факса Twilio отвечает в формате POST ответ (я думаю) и ожидаю, что мой сайт каким-то образом ответит. У меня есть URL-адрес обратного вызова, но это, похоже, асинхронный вызов, с которым я не знаю, как обрабатывать через Wordpress. (Я хочу оставаться на сайте Wordpress, если это возможно, для безопасности и удобства.)

У меня нет опыта управления этим типом связи между серверами; Я читал документацию Twilio, но думаю, что где-то совершаю фундаментальную ошибку ... Я понимаю что нужно сделать, но не как работает.

Как работает управление асинхронными вызовами Twilio с использованием PHP в Wordpress?


person iND    schedule 26.12.2019    source источник
comment
Возможно, у этого сайта есть работоспособный подход: сохранение сообщения, отправка данных в удаленный API и запись результата в виде метаданных сообщения не обязательно должны быть одним дискретным процессом. Torquemag.io/2016/01/use-asynchronous-php-wordpress   -  person iND    schedule 29.12.2019


Ответы (1)


Twilio можно настроить для использования стандарта REST API. (В Wordpress есть руководство по по настройке REST маршруты и конечные точки.)

Создайте настраиваемую конечную точку Twilio в Wordpress, используя register_rest_route. Его можно настроить как POST или GET, но он должен соответствовать вашему номеру факса Twilio настройки.

Например, поместите следующее в functions.php файл вашей темы (вы должны создать дочерний theme, прежде чем сделать это, если вы еще этого не сделали):

function process_twilio_fax_response( $request ) {
  $params = $request->get_params();
  // $params should have the data Twilio POSTed as JSON to the API.
  // For example, $params['account_sid'] should have the account_sid.
}

// This code registers the API endpoint and tells wordpress to call process_twilio_fax_response
// when data is POSTed to /wp-json/twilio/callback 
add_action( 'rest_api_init', function () {
  register_rest_route( 'twilio', '/callback', array(
    // WP_REST_Server:READABLE = GET only
    // WP_REST_Server:CREATABLE = POST only
    // WP_REST_Server:EDITABLE = POST, PUT, PATCH
    // WP_REST_Server:DELETABLE = DELETE only
    // WP_REST_Server:ALLMETHODS = GET, POST, PUT, PATCH, DELETE
    'methods' => WP_REST_Server:CREATABLE,
    'callback' => 'process_twilio_fax_response',
  ) );
} );

Это создаст конечную точку в / wp-json / twilio / callback (например, https://www.example.com/wp-json/twilio/callback), которую можно настроить на номер вашего факса Twilio в качестве URL-адреса " Пришел факс " (или" Изменения статуса факса ", или" Сбой основного обработчика ").

Когда Twilio отправляет POST-запрос к конечной точке, функция обратного вызова (в данном случае process_twilio_fax_response) будет вызываться с объектом запроса, переданным в качестве параметра. Затем вы можете получить данные JSON в виде ассоциативного массива, вызвав метод get_params() для параметра (в данном случае $request->get_params()).

Имейте в виду, что в этом примере нет аутентификации, очистки или проверки, которые необходимы для любого общедоступного REST-маршрута.


Если вы отлаживаете localhost, URL-адрес обратного вызова будет http://localhost/wp-json/twilio/callback. Twilio не сможет выполнить POST на localhost, поскольку он доступен только локально, но вы можете настроить веб-туннель через случайный временный URL-адрес в Linux, используя ngrok. В настройках вашего номера факса Twilio измените любую ссылку на домен localhost с помощью ngrok домен, сохраняя все остальные ресурсы URL, запросы и т. д. такими же. Например.:

https://localhost/SomeWordpressDomainName/wp-json/twilio/callback

становится

https://randomDomainNameFromNGROK.ngrok.io/SomeWordpressDomainName/wp-json/twilio/callback
person AlliterativeAlice    schedule 30.12.2019
comment
Выглядит многообещающе. Я скоро попробую это предложение. (Для localhost ngrok.com создает случайный временный веб-сайт, на котором Twilio может прозрачно взаимодействовать с моим локальным сайтом.) - person iND; 30.12.2019
comment
Все еще изучаем, работает ли это на практике. Я читаю соответствующие документы о Wordpress 'register_rest_route, включая документы по адресу Руководство по REST API, в частности Расширение REST API / маршрутов и конечных точек. - person iND; 31.12.2019