2015-03-26 4 views
2

Я не вижу способа в приложениях Restcomm, используя RVD для создания базовых данных или базовых логических деревьев. Есть ли способ, чтобы создать компоненты для:Базовые логические компоненты в приложениях Restcomm

  • Создание и присвоение значений переменных
  • Основные логические компоненты, такие как If Then Else, равные/не равны, Содержит, Сравнения для текста, числа, даты,
  • способность анализировать текст с помощью Regex
  • возможность вставлять переменные в любое значение и иметь их правильно разобран
  • Объединение строк или аналогичный

Компоненты, подобные этим, позволят разработчику приложений иметь гораздо больше автономных приложений вместо необходимости поддерживать инфраструктуру для управления всей логикой приложения.

Поддерживает ли текущий компонент API поддержку разработки новых компонентов?

ответ

1

@scottbarstow

На данный момент Restcomm РВД не обеспечивает большинство функций, которые вы упомянули из коробки. Тем не менее, вы можете достичь своей цели, используя Restcomm RVD External Services. Переменные, логика, разбор регулярных выражений и т. Д. Будут обрабатываться с использованием внешнего языка программирования по вашему выбору.

Другим вариантом является использование Restcomm-ruby helper для создания вашего приложения. Основное приложение будет построено с использованием Restcomm Visual Designer, а затем вы можете позвонить в приложение с помощью помощника Restcomm-ruby. Все (If Then Else, Equal/Not Equal и т. Д.) Будут обрабатываться помощником Restcomm-ruby.

Вы всегда можете отправить RFE в Telestax.

+0

Если я что-то не хватает, все помощники Ruby предоставляют оболочку для API. Он не вводит новые функции в структуру RVD/App. Я могу создавать внешние приложения, чтобы сделать все это, это не проблема. Однако во многих случаях я могу просто направить все взаимодействия на это приложение и даже не создать приложение. Я могу просто настроить URL-адреса приложений для чисел, как обычно, и отправить их всем. – scottbarstow

0

Включение сценариев в RVD относительно просто. Однако неясно, что это хороший способ справиться с ошибками кода приложения. Неопытные разработчики могут быстро стрелять в ногу с динамическими, слабо типизированными сценариями.

Первоначальная цель RVD состояла в том, чтобы сделать простые приложения для общения в реальном времени действительно легкими и надежными для создания. Его по-прежнему остается открытым вопрос о том, следует ли расширять область RVD, чтобы сделать более сложные вещи возможными или отсрочить их для внешних служб.

Можем ли мы приблизиться к приложению, которое вы пытаетесь реализовать? Если вы намерены принять SMS или запись голосового вызова и отправить его на сторонний сервис, такой как Slack, это может быть достигнуто с помощью службы Zapier. См. Прикрепленные скриншоты, которые иллюстрируют подключение из плагина WordPress (Gravity Forms) в Slack.

Может ли помочь аналогичный модуль Zapier для Restcomm (вместо Gravity Forms)?

Gravity form to Slack connection

Conditional data integration

+0

Вы можете, конечно, перейти к другим услугам легко. Но если вы думаете об этом как разработчике приложения, вы представляете большую сложность. Для каждого, кто устанавливает приложение, им нужна учетная запись Zapier или другие учетные данные, чтобы заставить ее работать? По крайней мере, вам нужно каким-то образом разрешить доступ ко всем другим точкам касания для каждого клиента, который загружает ваше приложение. Вопрос в том, является ли RVD просто мостом от телефонии ко всему остальному или он предназначен для более насыщенной платформы приложений. Либо все хорошо, но они очень разные сообщения. – scottbarstow

+0

Действительно. Первым приоритетом для RVD было упрощение простого подключения любой телефонной сети к современным приложениям. Теперь это в основном выполнено, мы можем немного продвинуться в уровень хостинга приложений, чтобы свести к минимуму движущиеся части, с которыми разработчикам приходится иметь дело с обычными приложениями. –

1

РВД привела из борьбы между предлагая максимальную гибкость для пользователя и расходов, как мало усилий в области развития, как это возможно, следуя итеративный подход. Он развивался с небольшими шагами, чтобы всегда иметь функциональное прогрессирующее приложение.В целях соблюдения этих требований было принято очень важное конструктивное решение: сохранить основную часть (контроллер) фиктивным движком, который просто создает RCML и делегирует всю логику где-то еще, легко доступную через HTTP.

Это, как говорится, @scottbarstow, я приветствую ваши комментарии. Наличие автономных приложений значительно упрощает настройку и обслуживание приложения, особенно сейчас, когда появляется RAS. ES должен быть инструментом для общения с действительно внешними целями, не способ делегировать все виды сложных операций за пределами RVD.

Однако «логика» стоит дорого. Представляя несколько элементов для ветвления, сравнения, манипуляции с строками и т. Д., Требуется много мышления для разработки, часы для выполнения и головные боли для отладки.

Альтернативный подход я предложить заключается в следующем:

  1. улучшить способ ES переговоры с внешними конечными точками. Добавьте полную поддержку для отправки POST/JSON. Выбирайте выбор между типами контента application/json и url-encoded. Ручка все, что обычно требуется обычными поставщиками услуг , как Slack. Вся обработка будет выполняться в ES. Дальнейшая обратная связь здесь будет оценена.

  2. Храните всю логику в одном месте, а не распространяйте ее через несколько новых элементов. Представьте элемент «Сценарий», где какой-то тип механизма сценариев будет использоваться для выполнения блока кода , реализующего всю необходимую логику. Позвольте этому элементу говорить снаружи мир через простой контракт на основе строки с «INs» и «OUTs». Существует уже экспериментальная реализация по этому вопросу с использованием Groovy и то же самое можно сделать на стороне сервера Javascript.

Но подождите минуту. RVD должен быть простым инструментом для обычных пользователей, а не для разработчиков! Ну, действительно. Но рассмотрим альтернативу. Будет ли проще понимать и использовать несколько новых умных элементов и все дополнительные синтаксические последствия, которые будут с ним связаны? Наверное, если только это не очень просто. Не говоря уже об отладке и поддержке.

Javascript имеет хорошо известный синтаксис, и его гораздо легче отлаживать. Он даже запускается внутри браузера, который открывает окно для тестирования на стороне клиента.

  1. Ввести очень простой элемент ветвления/GOTO. Он сможет сломать выполнение модуля и перенаправить на другой модуль. Однако логика ветвления будет реализована в предыдущем элементе Script.

Технические недостатки и «почему логика должна быть в одной черный ящик место»

РВД имеет состояние. Существуют переменные, которые он создает (Collect, элементы ES создают такие) в дополнение к этим, которые подаются Restcomm, которые необходимо сохранить.Поскольку поток приложений развивается в виде серии запросов на восстановление, инициированных пользователем, которые по своей природе являются апатридами, существуют два варианта.

(а) Переработайте эти переменные в URL, действий или

(б) хранить их в сессии-подобную структуру в РВД и сохранить идентификатор сеанса, который будет передан вместо этого.

RVD использует (a).

Это означает, что когда управление передается обратно в restcomm (например, когда выполняется элемент Gather/Collect), все это состояние должно быть закодировано в URL-адресе действия, содержащемся в ответе. Таким образом, когда restcomm делает следующий запрос, RVD будет иметь состояние. Его более или менее та же картина с веб-разработчиком старой школы без сеанса HTTP.

Это состояние должно быть маленьким, чтобы не было много данных, идущих туда и обратно между RVD и Restcomm.

Приложение RVD состоит из модулей, которые содержат элементы, которые обрабатываются последовательно, и любой элемент может потенциально нарушить выполнение приложения в RVD и вернуть управление обратно в restcomm. Имеет смысл сделать элементы независимыми, так что есть возможность разорвать выполнение приложения и вернуть управление обратно в Restcomm.

Я хочу сказать, что мы должны сохранять элементы независимыми, интерфейс между элементом и контекстом выполнения RVD прост и состояние легко сериализуемое. И блок-бокс, подобный элементу скрипта, похоже, соответствует этой цели.

+0

Я думаю, что скриптовая работа будет работать. Я сделал это с продуктом несколько лет назад, где мы разрешили пользователям писать Javascript для обработки любой логики, а затем мы выполнили скрипт в стеной V8 VM. Существует ряд проблем с этим подходом, а именно: - Контроль того, что может и не может быть выполнено в скрипте и проверка на наличие нарушений (предотвращение злоупотреблений другими словами) - Отладка/выявление ошибок значимым/очевидным способом - Предоставление сущностей приложения для среды выполнения JS способом, который имеет смысл – scottbarstow

+0

Кроме того ... - Отключение выполнения с помощью чего-то вроде тюрьмы V8 VM, как и мы. Если вы позволите кому-то писать javascript, разработчики сделают все возможное, чтобы найти дыры в вашем подходе. Я бы сказал, что если инструмент должен быть легким для пользователей, не являющихся разработчиками, то иметь больше компонентов, а не язык сценариев, имеет больше смысла. Решение для сценариев, очевидно, намного мощнее. – scottbarstow

+0

Я не работал с серверным javascript, встроенным в Java, но я ожидал бы, что он будет заключен в тюрьму по определению. В отличие, скажем, Groovy, который является языком общего назначения, и казалось бы почти невозможным обеспечить безопасность. Однако могут возникать проблемы с ресурсами ЦП и ОЗУ, которые могут легко привести систему на колени. – otsakir