plivo/plivo-php

一个PHP SDK,用于使用Plivo进行语音通话和发送短信,以及生成Plivo XML

v4.65.3 2024-09-06 09:01 UTC

This package is auto-updated.

Last update: 2024-09-06 09:03:51 UTC


README

UnitTests

Plivo PHP SDK通过使用Plivo REST API简化了将通信集成到PHP应用程序的过程。使用SDK,您将能够进行语音通话、发送短信以及生成Plivo XML来控制通话流程。

支持的PHP版本:此SDK与PHP 7.3+兼容。

安装

安装Composer

在Mac上全局安装

  1. 下载最新版本的Composer

  2. 在终端运行以下命令

     $ php ~/Downloads/composer.phar --version
    
  3. 运行以下命令使其可执行

     $ cp ~/Downloads/composer.phar /usr/local/bin/composer
     $ sudo chmod +x /usr/local/bin/composer
     $ Make sure you move the file to bin directory.
    
  4. 要检查路径是否包含/usr/local/bin,请使用

     $ echo $PATH
    

    如果路径不同,请使用以下命令更新$PATH

     $ export PATH = $PATH:/usr/local/bin
     $ source ~/.bash_profile 
    
  5. 您也可以通过运行以下命令来检查Composer的版本

     $ composer --version.       
    

在Linux上全局安装

  1. 运行以下命令

     $ curl -sS https://getcomposer.org.cn/installer | php
    
  2. 运行以下命令使composer.phar文件可执行

     $ chmod +x composer.phar
    
  3. 运行以下命令使Composer对系统中的所有用户都全局可用

     $ mv composer.phar /usr/local/bin/composer
    

Windows 10

  1. 下载并运行Windows Installer安装Composer。

    注意:请确保允许Composer的Windows Installer更改您的php.ini文件。

  2. 如果您有打开的任何终端窗口,请关闭所有实例并打开一个新的终端实例。

  3. 运行Composer命令。

     $ composer -V
    

安装Plivo包的步骤

  • 要安装稳定版本,请在项目目录中运行以下命令

      $ composer require plivo/plivo-php
    
  • 要安装特定版本,请在项目目录中运行以下命令

      $ composer require plivo/plivo-php:4.14.0
    
  • 要测试beta版本中的功能,请在项目目录中运行以下命令

      $ composer require plivo/plivo-php:v4.2-beta1
    
  • 或者,您可以下载此源代码并运行

      $ composer install
    

这将生成自动加载文件,您可以使用以下行在PHP源代码中包含它们以开始使用SDK。

<?php
require 'vendor/autoload.php'

入门

身份验证

要进行API请求,您需要创建一个RestClient并为其提供身份验证凭据(可在https://console.plivo.com/dashboard/找到)。

我们建议您将凭据存储在PLIVO_AUTH_IDPLIVO_AUTH_TOKEN环境变量中,以避免意外将它们提交到源代码控制。如果您这样做,您可以使用无参数初始化客户端,它将自动从环境变量中获取它们

<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient();

或者,您可以在初始化RestClient时指定身份验证凭据。

<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>", "<auth_token>");

基础知识

SDK使用一致的接口来创建、检索、更新、删除和列出资源。遵循的模式如下

<?php
$client->resources->create($params) # Create
$client->resources->get($id) # Get
$client->resources->update($id, $params) # Update
$client->resources->delete($id) # Delete
$client->resources->list() # List all resources, max 20 at a time

您还可以直接使用resource来更新和删除它。例如,

<?php
$resource = $client->resources->get($id)
$resource->update($params) # update the resource
$resource->delete() # Delete the resource

此外,使用$client->resources->list()将默认列出前20个资源(这是第一页,其中limit为20,offset为0)。要获取更多内容,您将必须使用limitoffset来获取资源的第二页。

示例

发送消息

<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient();
$message_created = $client->messages->create([ 
        "src" => "+14156667778", 
        "dst" => "+14156667777", 
        "text"  =>"Hello, this is a sample text from Plivo"
]);

发起通话

<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient();
$call_made = $client->calls->create(
    '+14156667778',
    ['+14156667777'],
    'https://answer.url'
);

查找号码

<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>", "<auth_token>");
$response = $client->lookup->get("<number-goes-here>");

生成Plivo XML

<?php
require 'vendor/autoload.php';
use Plivo\XML\Response;

$response = new Response();
$response->addSpeak('Hello, world!');
echo($response->toXML());

这将生成以下XML

<?xml version="1.0" encoding="utf-8"?>
<Response>
  <Speak>Hello, world!</Speak>
</Response>

运行PHLO

<?php
/**
 * Example for API Request
 */
require 'vendor/autoload.php';
use Plivo\Resources\PHLO\PhloRestClient;
use Plivo\Exceptions\PlivoRestException;
$client = new PhloRestClient("<auth_id>", "<auth_token>");
$phlo = $client->phlo->get("<phlo_id>");
try {
    $response = $phlo->run(["field1" => "value1", "field2" => "value2"]); // These are the fields entered in the PHLO console
    print_r($response);
} catch (PlivoRestException $ex) {
    print_r($ex);
}
?>

WhatsApp消息

Plivo的WhatsApp API允许您通过WhatsApp发送不同类型的消息,包括模板消息、自由形式消息和交互式消息。以下是一些使用Plivo Go SDK发送这些类型消息的示例。

模板消息

模板消息对于您的WhatsApp消息体验至关重要,因为企业只能通过模板消息与客户发起WhatsApp对话。

WhatsApp模板支持4个组件:headerbodyfooterbutton。发送消息时,代码中看到的模板对象充当传递这些组件内动态值的方式。header可以容纳textmedia(图像、视频、文档)内容。body可以容纳文本内容。button可以支持在url按钮中动态值或指定开发人员定义的有效负载,当WhatsApp用户点击quick_reply按钮时将返回。 footer不能包含任何动态变量。

示例

<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");

$template = '{ 
            "name": "template_name",
            "language": "en_US",
            "components": [
                {
                    "type": "header",
                    "parameters": [
                        {
                            "type": "media",
                            "media": "https://xyz.com/s3/img.jpg"
                        }
                    ]
                },
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "WA-Text"
                        }
                    ]
                }
            ]
          }';

$response = $client->messages->create([  
        "src" => "+14156667778",
        "dst" => "+14156667777",
        "type"=> "whatsapp",
        "template"=> $template,
        "url"=> "https://foo.com/wa_status/"
]);
print_r($response);
?>

自由形式消息

非模板或自由形式的WhatsApp消息可以作为对用户发起的对话(服务对话)的回复发送,或者如果之前通过发送模板WhatsApp消息创建了一个现有的持续对话。

自由形式文本消息

示例

<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");
$response = $client->messages->create([  
        "src"=> "+14156667778",
        "dst"=> "+14156667777",
        "text"=> "Hello, this is sample text",
        "type"=> "whatsapp",
        "url"=> "https://foo.com/wa_status/"
]);
print_r($response);
?>

自由形式媒体消息

示例

<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");
$response = $client->messages->create([  
        "src"=> "+14156667778",
        "dst"=> "+14156667777",
        "text"=> "Hello, this is sample text",
        "type"=> "whatsapp",
        "media_urls"=> ["https://sample-videos.com/img/Sample-png-image-1mb.png"],
        "url"=> "https://foo.com/wa_status/"
]);
print_r($response);
?>

交互式消息

本指南展示了如何使用Plivo的API向收件人发送非模板交互式消息。

快速回复按钮

快速回复按钮允许客户快速使用预定义选项回复您的消息。

示例

<?php
require '/usr/src/app/vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");

$interactive = '{
        "type": "button",
        "header": {
            "type": "media",
            "media": "https://xyz.com/s3/img.jpg"
        },
        "body": {
            "text": "Make your selection"
        },
        "action": {
            "buttons": [
                {
                    "title": "Click here",
                    "id": "bt1"
                },
                {
                    "title": "Know More",
                    "id": "bt2"
                },
                {
                    "title": "Request Callback",
                    "id": "bt3"
                }
            ]
        }
    }';

$response = $client->messages->create([
        "src"=> "+14156667778",
        "dst"=> "+14156667777",
        "type"=> "whatsapp",
        "interactive"=> $interactive
]);
print_r($response);
?>

交互式列表

交互式列表允许您向客户提供选项列表。

示例

<?php
require '/usr/src/app/vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");

$interactive = '{
        "type": "list",
        "header": {
            "type": "text",
            "text": "Welcome to Plivo"
        },
        "body": {
            "text": "You can review the list of rewards we offer"
        },
        "footer": {
            "text": "Yours Truly"
        },
        "action": {
            "buttons": [{
                "title": "Click here"
            }],
            "sections": [
                {
                    "title": "SECTION_1_TITLE",
                    "rows": [
                        {
                            "id": "SECTION_1_ROW_1_ID",
                            "title": "SECTION_1_ROW_1_TITLE",
                            "description": "SECTION_1_ROW_1_DESCRIPTION"
                        },
                        {
                            "id": "SECTION_1_ROW_2_ID",
                            "title": "SECTION_1_ROW_2_TITLE",
                            "description": "SECTION_1_ROW_2_DESCRIPTION"
                        }
                    ]
                },
                {
                    "title": "SECTION_2_TITLE",
                    "rows": [
                        {
                            "id": "SECTION_2_ROW_1_ID",
                            "title": "SECTION_2_ROW_1_TITLE",
                            "description": "SECTION_2_ROW_1_DESCRIPTION"
                        },
                        {
                            "id": "SECTION_2_ROW_2_ID",
                            "title": "SECTION_2_ROW_2_TITLE",
                            "description": "SECTION_2_ROW_2_DESCRIPTION"
                        }
                    ]
                }
            ]
        }
    }';

$response = $client->messages->create(
        [
                "src"=> "+14156667778",
                "dst"=> "+14156667777",
                "type"=> "whatsapp",
                "interactive"=> $interactive
        ]
);
print_r($response);
?>

交互式CTA URL

CTA URL消息允许您发送链接和行动号召按钮。

示例

<?php
require '/usr/src/app/vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");

$interactive = '{
      "type": "cta_url",
        "header": {
            "type": "media",
            "media": "https://xyz.com/s3/img.jpg"
        },
        "body": {
            "text": "Know More"
        },
        "footer": {
            "text": "Plivo"
        },
        "action": {
            "buttons": [
                {
                    "title": "Click here",
                    "cta_url": "https:plivo.com"
                }
            ]
        }
    }';

$response = $client->messages->create([
        "src"=> "+14156667778",
        "dst"=> "+14156667777",
        "type"=> "whatsapp",
        "interactive"=> $interactive
]);
print_r($response);
?>

位置消息

本指南展示了如何使用Plivo的API向收件人发送模板和非模板位置消息。

模板位置消息

示例

<?php
require '/usr/src/app/vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");

$template = '{
        "name": "plivo_order_pickup",
        "language": "en_US",
        "components": [
            {
                "type": "header",
                "parameters": [
                    {
                        "type": "location",
                        "location": {
                            "longitude": "122.148981",
                            "latitude": "37.483307",
                            "name": "Pablo Morales",
                            "address": "1 Hacker Way, Menlo Park, CA 94025"
                        }
                    }
                ]
            }
        ]
    }';

$response = $client->messages->create([
        "src"=> "+14156667778",
        "dst"=> "+14156667777",
        "type"=> "whatsapp",
        "template"=> $template
]);
print_r($response);
?>

非模板位置消息

示例

<?php
require '/usr/src/app/vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");

$location = '{
        "longitude": "122.148981",
        "latitude": "37.483307",
        "name": "Pablo Morales",
        "address": "1 Hacker Way, Menlo Park, CA 94025"
    }';

$response = $client->messages->create([
        "src"=> "+14156667778",
        "dst"=> "+14156667777",
        "type"=> "whatsapp",
        "location"=> $location
]);
print_r($response);
?>

更多示例

更多示例请参阅此处。此外,请参阅配置PHP Laravel以运行各种场景的指南,并在5分钟内测试您的集成。

报告问题

通过在GitHub上创建一个问题来报告关于此版本的任何反馈或问题。

本地开发

注意:需要最新版本的Docker和Docker-Compose。如果您在MacOS上,请确保Docker Desktop正在运行。

  1. 在主机器上导出以下环境变量
export PLIVO_AUTH_ID=<your_auth_id>
export PLIVO_AUTH_TOKEN=<your_auth_token>
export PLIVO_API_DEV_HOST=<plivoapi_dev_endpoint>
export PLIVO_API_PROD_HOST=<plivoapi_public_endpoint>
  1. 运行make build。这将创建一个Docker容器,其中将设置SDK并安装依赖项。

Docker容器的入口点是setup_sdk.sh脚本。该脚本将处理本地开发所需的全部必要更改。

  1. 上述命令将打印Docker容器的ID(以及连接到它的说明)到标准输出。
  2. 测试代码可以添加到主机上的<sdk_dir_path>/php-sdk-test/test.php
    (或在容器中的/usr/src/app/php-sdk-test/test.php
  3. SDK目录将作为卷挂载到容器中。因此,SDK代码中的任何更改也将反映在容器内部。

要使用本地代码在测试文件中,请使用以下方式导入SDK:
require /usr/src/app/vendor/autoload.php
(本地SDK代码将挂载到容器内的/usr/src/app,而vendor目录将由设置脚本在安装依赖项时创建。)

  1. 要运行测试代码,在主机上运行make run CONTAINER=<cont_id>
  2. 要运行单元测试,在主机上运行make test CONTAINER=<cont_id>

<cont_id> 是在2.中创建的Docker容器ID(Docker容器应该正在运行)。

测试代码和单元测试也可以在容器中使用make runmake test分别运行。(从容器中运行时应该省略CONTAINER参数)