taylornetwork / laravel-nexmo
Requires
- php: >=7.2
- illuminate/support: >=5.5
- nexmo/laravel: ^2.2
- pusher/pusher-php-server: ^4.1
Requires (Dev)
- orchestra/testbench: ^5.1
This package is auto-updated.
Last update: 2024-09-05 20:40:03 UTC
README
目前处于开发中,因此没有任何保证能正常工作,可能会定期失败
包状态和目标
- 构建NCCOs
- 实现一个非常简单的IVR构建器
- 处理接听语音电话
- 将电话路由到正确的IVR菜单
- 处理传入的短信
- 处理发出的短信
- 非常简单的实时短信聊天(部分重做中)
- 正确处理IVR步骤的输入
安装
使用composer
$ composer require taylornetwork/laravel-nexmo
迁移表格
$ php artisan migrate
发布资产
$ php artisan vendor:publish --provider="TaylorNetwork\\LaravelNexmo\\NexmoServiceProvider"
将配置、迁移和js(vue)组件发布。
config/
+ ncco.php
database/
migrations/
+ 2020_04_03_000000_create_calls_table.php
+ 2020_04_03_000001_create_ivrs_table.php
+ 2020_04_03_000002_create_ivr_steps_table.php
+ 2020_04_07_000003_create_sms_table.php
resources/
vendor/
taylornetwork/
laravel-nexmo/
components/
Ivr/
+ IvrBuilder.vue
+ IvrMenu.vue
+ IvrApp.vue
Sms/ (not up to date)
+ Messenger.vue
+ ComposeSms.vue
+ laravel-nexmo.js
如果您打算使用包含的vue组件,请参阅Vue组件。
添加您的Vonage(Nexmo)信息
在您的.env
中添加以下行
NEXMO_KEY=(Your API Key)
NEXMO_SECRET=(Your API Secret)
NEXMO_NUMBER=(Your Number)
设置您的Vonage(Nexmo)应用程序
您需要登录到您链接的应用程序并设置您的webhooks。
运行php artisan route:list
应该添加以下路由
+---------------------------------+--------------------------------------------------------------------------------+
| URI | Action |
+---------------------------------+--------------------------------------------------------------------------------+
| api/nexmo/call/answer | TaylorNetwork\LaravelNexmo\Controllers\API\CallController@answer |
| api/nexmo/call/ivr/{ivr}/answer | TaylorNetwork\LaravelNexmo\Controllers\API\CallController@answerWithIvr |
| api/nexmo/event/update | TaylorNetwork\LaravelNexmo\Controllers\API\EventController@handleEventUpdate |
| api/nexmo/sms/inbound | TaylorNetwork\LaravelNexmo\Controllers\API\SmsController@handleInboundMessage |
| api/nexmo/sms/outbound | TaylorNetwork\LaravelNexmo\Controllers\API\SmsController@handleOutboundMessage |
| api/nexmo/sms/{sms}/send | TaylorNetwork\LaravelNexmo\Controllers\API\SmsController@send |
将您的webhooks分配给相应的URL。
为传入的电话做准备
您需要执行以下操作之一(A)创建一个新的IVR菜单或(B)覆盖answer
方法。
创建一个新的IVR菜单
目前没有简单的方法来做这件事,除非手动添加条目。
覆盖answer方法
默认情况下,该包将查找App\Http\Controllers\Api\CallController
这可以通过发布配置进行自定义。
namespace App\Http\Controllers\Api; use Illuminate\Routing\Controller; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class CallController extends Controller { public function answer(Request $request): JsonResponse { // Must respond with a JSON response. } }
使用方法
NccoBuilder类
可以使用NccoBuilder
外观或创建一个新的实例来调用。
操作方法
所有NCCO操作都有自己的方法。 见NCCO参考 每个操作方法都有一个必需的参数,将匹配NCCO参考中的必需参数。所有其他选项都可以添加到第二个可选数组参数中。
操作方法始终返回NccoBuilder
实例,因此您可以链接任何其他方法。
例如
// Default talk action $builder->talk('Hello!'); // Talk with different voice $builder->talk('Hi there!', [ 'voiceName' => 'Joey' ]); // Connect to another phone $builder->connect([ 'type' => 'phone', 'number' => '19998887777' ]); // Start recording $builder->record();
附加方法
addAction(string $action, array $options = [])
将提供的操作及其给定选项添加。
所有操作方法都调用此方法。
$builder->addAction('talk', [ 'text' => 'Hello!' ]);
append(array $data)
添加到NCCO堆栈的末尾。
prepend(array $data)
添加到NCCO堆栈的开始。
getNcco()和ncco()
返回NCCO数组。
getJsonNcco()和json()
以JSON格式返回NCCO。
buildResponse(int $httpStatus = 200)
构建并返回一个包含NCCO和提供的HTTP状态码的Illuminate\Http\JsonResponse
。
respond(int $httpStatus = 200)
返回从buildResponse()
构建的响应。
调用模型
TaylorNetwork\LaravelNexmo\Models\Call
模型处理传入的电话及其状态和价格。
IVR模型
TaylorNetwork\LaravelNexmo\Models\Ivr
模型处理呼叫者听到的内容以及他们拨打电话时发生的事情。
每个Ivr
模型都有许多IvrSteps
,它们处理所有事情。
您可以使用build()
或respond()
方法来构建IVR菜单。
build()
将为菜单构建整个NCCO并返回NCCO作为数组。
respond()
将build()
方法构建的菜单转换为Illuminate\Http\JsonResponse
。
在您的控制器中,您可以进行如下操作:
public function incomingIvr(Ivr $ivr, Request $request) { return $ivr->respond(); }
IVR步骤模型
《TaylorNetwork\LaravelNexmo\Models\IvrStep》模型包含了在相应IVR菜单中的操作、选项和顺序。
短信模型
《TaylorNetwork\LaravelNexmo\Models\Sms》模型处理所有传入和传出的短信消息,包括发送消息的实际操作。
send()
调用此方法将在尚未发送的情况下发送消息,前提是它是传出消息。
Vue组件
设置
如果您打算使用包含的Vue组件,请确保您已安装所有必需的依赖项。
$ npm install --save vue vue-template-compiler axios pusher-js v-jsoneditor
或将以下内容导入到您的package.json
{ "dependencies": { "vue": "^2.6.11", "vue-template-compiler": "^2.6.11", "axios": "^0.19.2", "pusher-js": "^5.1.1", "v-jsoneditor": "^1.2.3" } }
在laravel-nexmo.js
中设置您的Pusher应用密钥
// laravel-nexmo.js window.pusherInstance = new Pusher('your-pusher-app-key', { cluster: 'us2', forceTLS: true, encrypted: true, });
在您的app.js
文件中引入laravel-nexmo.js
,在window.Vue = require('vue');
之后和创建新的Vue实例之前进行引入。
// app.js window.Vue = require('vue'); // This assumes your app.js file is at resources/js require('../vendor/taylornetwork/laravel-nexmo/laravel-nexmo'); const app = new Vue({ el: '#app', });
IvrApp
《IvrApp》组件允许您创建和编辑IVR菜单和步骤
<ivr-app></ivr-app>
其中$ivr
是TaylorNetwork\LaravelNexmo\Models\Ivr
的实例
ComposeSms
《ComposeSms》组件是发送短信的便捷起点,使用您之前设置的nexmo号码向一个号码发送短信。
<compose-sms></compose-sms>
Messenger
《Messenger》组件是一个基于Pusher的非常基础的聊天应用。
<!-- Minimum --> <messenger number="(number of the person the chat is with NOT your number)"></messenger> <!-- With a contact name --> <messenger number="(contact's number)" name="(contact's name)"></messenger> <!-- With a contact name and existing messages --> <messenger number="(contact's number)" name="(contact's name)" :messages="{{ $loadedMessagesFromDatabase }}"></messenger>
许可证
MIT