taylornetwork/laravel-nexmo

dev-master 2021-11-05 14:39 UTC

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>

其中$ivrTaylorNetwork\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