扩展 twilio 插件以使用 WordPress REST API

Extending twilio plugin to work with WordPress REST API

我已经完成了有关 sending and receiving SMS 与 WordPress 的 twilio 教程。我将它们集成到我的测试安装中,然后将它们合并为一个。 (接收一个很短,虽然它不是一个完整的 "receive" 而不是盲目的响应)。

然后我遇到了 themebound 的 twilio-core,所以我看了一下,很快我得到了一个致命错误,因为它们都使用 twilio helper library。为了测试,我只是停用了第一个并激活了第二个,这引出了我的第一个问题:

这两个使用相同的库,并且都使用过require_once。每个人都将它加载到自己的插件文件夹中。图书馆的原名是twilio-php-master,一个改名为twilio另一个twilio-php。这一点都不重要,因为它们位于不同的位置。致命错误是由于内部工作具有相同的函数名称。

  1. 如何测试其他插件帮助库的存在并使用它来代替我安装的那个?

  2. WordPress 加载插件的顺序如何?很可能如果我的首先加载......好吧,我什至不能走那么远,因为它只是试图同时激活它而崩溃。

    --- 我们现在进入下一个问题 ---

    因此,我可能会选择 twilio-core 版本,因为它看起来更有特色并且可以在 github 上使用,即使作者不太活跃(有几个月前没有讨论的拉取请求)。

    我想扩展其中一个发送插件(任一)关于从 twilio 接收消息的功能。目前,这两个示例都使用 classes 进行发送,而我使用的接收不是。因此,我刚刚将它添加到主插件文件(带有插件元数据的文件)的末尾。 (请注意,这不是上述致命错误的原因,这发生在我开始合并发送和接收之前)

    因为接收涉及 REST API 而不是由系统上的用户操作启动(即管理区域中的某人通过管理面板访问 class),我'我不确定 a) 我把它放在那里是否合适,b) 在进一步处理收据时使用 class 内的发送函数。我的最终目标是分析传入的消息并通过 twilio 或其他应用程序将其转发出去,甚至只是将其记录在 wordpress 本身中。

  3. 我应该将接收 functionality/plugin 与发送分开吗?

    这引出了对我来说最难的问题:

  4. 我如何扩展任一插件以使发送功能可用于我的接收插件? (这是我困惑的一部分来自) -->> 因为这两个插件都只在管理区运行,REST API 不是真正的用户在前端运行,我如何在管理区?请问是"just be available"吗?我必须在 public 端复制它们吗?然后如果是这样,是否也有必要在管理区域中也有它?

编辑: 关于下面的评论之一,我已经测试过并且 twl_send_sms 在加载助手后可用。我要做的是确定一种方法来查看助手是否已加载(函数存在测试可能就足够了),如果是,则根据需要要求或不要求我的版本。

从收到的消息中,我现在可以单独转发新消息。但是我怎样才能将初始入站消息的参数传递给回调函数呢?例如,如何使用 POST 数据填充 $sms_in

function register_receive_message_route() {
  register_rest_route( 'sms/v1', '/receiver_sms', array(
    'methods' => 'POST',
    'callback' => 'trigger_receive_sms',
  ) );
}

function trigger_receive_sms($sms_in = '') {
  /* we have three things to do:
   *  1: send the reply to twilio,
   *  2: craft a reply,
   *  3: save the data message to the database
   */

  echo header('content-type: text/xml');

  echo ('<?xml version="1.0" encoding="UTF-8"?>');
  echo ('<Response>');
  echo ('  <Message>Thanks, someone will be in contact shortly.</Message>');
  echo ('</Response>');

    $args = array(
        'number_to' => '+xxxxxxxxxxx',
        'message' => "Test Worked!\n$sms_in",
        );
    twl_send_sms( $args );

此处为 Twilio 开发人员布道师。

在我看来,您的发送功能(无论您可以从 twilio-core 中得到什么)与您的接收功能是分开的。所以我可能会将它们拆分为两个插件,并按照 the post you mentioned 中关于如何编写接收和响应 SMS 消息的内容的说明进行操作。这样,twilio-core 可以使用它捆绑的 Twilio 库,而您的接收插件将不需要使用库(它只需要使用 TwiML 响应,这只是 XML)。

虽然我不确定我理解问题 4 的最后一部分,但您不能真正与插件的接收端点交互,因为它所做的只是 return XML给你。这是为了让 Twilio 与之互动。

编辑

在回答您更新的问题时,当您的回调由 POST 请求触发时,它会传递一个 WP_REST_Request 对象。此对象包含 POST 主体,参数可以通过数组访问来访问。

function trigger_receive_sms($request) {
  echo $request['Body'];
}

好消息,如果您打算 send two messages then you can do so entirely with TwiML. You just need to use two <Message>s:

echo ('<?xml version="1.0" encoding="UTF-8"?>');
echo ('<Response>');
echo ('  <Message>Thanks, someone will be in contact shortly.</Message>');
echo ('  <Message to="YOUR_OTHER_NUMBER">It worked!</Message>');
echo ('</Response>');

这样你就不用担心其他图书馆了。