Igor,
спасибо за информацию, в настоящий момент я не могу удостоверится доходят ли вызовы до моего вебхука. Ваши коллеги говорят что скорее всего хук некорректный. Не более того.
Сам сценарий - во вложении. Хук ниже.
Очень жаль что сервис и документация по нему преподносится как игрушка для не ленивых программистов (большинство из них оказывается не хотят разбираться), а не для безнесменов.
if (isset($_GET['zd_echo'])) exit($_GET['zd_echo']);
use Zadarma_API\Api;
use Zadarma_API\Webhook\AbstractNotify;
use Zadarma_API\Webhook\NotifyIvr;
use Zadarma_API\Webhook\NotifyStart;
use Zadarma_API\Webhook\Request;
define('KEY', '177e579a06b4557e0118');
define('SECRET', '18ced67cb9f140f726d2');
class WebhookExample {
private static $api = null;
const INFO_FILE_ID = '199a520c8b81c207';
const WRONG_INPUT_FILE_ID = '199a520c8b81c2071';
const DTMF_NAME_2 = 'date';
const DTMF_NAME_3 = 'menu';
public static $menu = [
'file' => '1f5240a2c672ddb6',
1 => [
'file' => '1f5240a2c672ddb6',
1 => [
'file' => '199a520c8b81c207',
1 => [
'file' => '199a520c8b81c207',
],
],
2 => [
'file' => '199a520c8b81c207',
],
],
2 => [
'file' => '50979aa4feffcf90',
],
];
public static function example3()
{
$request = new Request();
/** @var NotifyIvr $notify */
if ($notify = self::getEvent([AbstractNotify::EVENT_START])) {
$request
->setIvrPlay(self::$menu['file'])
->setWaitDtmf(5, 1, 1, self::DTMF_NAME_3, 'hangup')
->send();
return;
}
$notify = self::getEvent([AbstractNotify::EVENT_IVR]);
if (!empty($notify->wait_dtmf->digits) && mb_strpos($notify->wait_dtmf->name, self::DTMF_NAME_3) === 0) {
$menu = mb_substr($notify->wait_dtmf->name, mb_strlen(self::DTMF_NAME_3));
switch ($notify->wait_dtmf->digits){
case 1:
case 2:
case 3:
$menu .= $notify->wait_dtmf->digits;
break;
case 4:
if ($menu) {
$menu = mb_substr($menu, 0, mb_strlen($menu) - 1);
}
break;
case 5:
default:
$request->setHangup()->send();
return;
}
list($menu, $file) = self::getMenuFile($menu);
$request
->setIvrPlay($file)
->setWaitDtmf(5, 1, 1, self::DTMF_NAME_3.$menu, 'hangup')
->send();
}
}
private static function getEvent($allowedTypes)
{
if (self::$api === null) {
self::$api = new Api(KEY, SECRET, true);
}
return self::$api->getWebhookEvent($allowedTypes);
}
private static function getMenuFile($menuDigits)
{
$menuDigits = (string)$menuDigits;
$menuDigitsResult = '';
$menu = self::$menu;
while ($menuDigits) {
$currentDigit = mb_substr($menuDigits, 0, 1);
$menuDigits = mb_substr($menuDigits, 1);
if (isset($menu[$currentDigit])) {
$menu = $menu[$currentDigit];
$menuDigitsResult .= $currentDigit;
} else {
break;
}
}
return [$menuDigitsResult, $menu['file']];
}
}
WebhookExample::example3();