#c# #twilio-programmable-chat #clearscript
#c# #twilio-программируемый чат #clearscript
Вопрос:
Я пытаюсь написать оболочку C # для программируемого инструмента чата Twilio. Предоставляемая библиотека предназначена для клиентов JS. Я думал, что использование такого инструмента, как ClearScript (V8), позволит мне обернуть js по мере необходимости.
Примером кода на сайте является
const Chat = require('twilio-chat');
// Make a secure request to your backend to retrieve an access token.
// Use an authentication mechanism to prevent token exposure to 3rd parties.
const accessToken = '<your accessToken>';
Chat.Client.create(accessToken)
.then(client => {
// Use Programmable Chat client
});
итак, после того, как я инициализирую
using (var engine = new V8ScriptEngine())
{
engine.Execute(@"
const Chat = require('twilio-chat.js');
const token = 'my token';
Chat.Client.create(token).then(client=>{
});
");
}
Ошибки программы в строке ‘require’ с ошибкой require не определены.
Я прочитал, что require просто возвращает модуль экспорта, поэтому я заменил require(‘…
с
engine.Execute(@"
const Chat = ('twilio-chat.js').module.exports;
...
но эти ошибки с не удается прочитать свойство ‘exports’ из undefined’
Я получил файл js отhttps://media.twiliocdn.com/sdk/js/chat/releases/4.0.0/twilio-chat.js
Как я могу обойти это или, может быть, есть лучший способ. Я ценю любые идеи.
Спасибо
Ответ №1:
Я ничего не знаю о Twilio, но вот как включить поддержку модуля CommonJS в ClearScript. Этот пример загружает скрипт из Интернета, но вы можете ограничить его локальной файловой системой или предоставить пользовательский загрузчик:
engine.AddHostType(typeof(Console));
engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading;
engine.DocumentSettings.SearchPath = "https://media.twiliocdn.com/sdk/js/chat/releases/4.0.0/";
engine.Execute(new DocumentInfo() { Category = ModuleCategory.CommonJS }, @"
const Chat = require('twilio-chat');
const token = 'my token';
Chat.Client.create(token).then(
client => Console.WriteLine(client.toString()),
error => Console.WriteLine(error.toString())
);
");
Это успешно загружает сценарий Twilio, который, по-видимому, зависит от других сценариев и ресурсов, которые не являются частью стандартной среды JavaScript, предоставляемой ClearScript / V8. Чтобы заставить его работать, вам придется увеличить путь поиска и, возможно, предоставить дополнительные ресурсы вручную. Как показано, этот код выводится ReferenceError: setTimeout is not defined
.
Комментарии:
1. Спасибо. Это помогло мне лучше понять работу ClearScript, и я продвинулся так же далеко, как и вы. Спасибо, спасибо, спасибо вам.
2. @BitCortex — не могли бы вы расширить «Этот пример загружает скрипт из Интернета, но вы можете ограничить его локальной файловой системой или предоставить пользовательский загрузчик:» пожалуйста? Я заинтересован в загрузке начального локального скрипта, который затем назовет другие локальные скрипты, которые ему требуются. В моем случае начальный сценарий — это процедурный код, а сценарии, которые он захочет загрузить, — это файлы, представляющие классы JS, к которым он относится. Таким образом, первый сценарий может хотеть показать зарплату для сотрудника, для которого он хотел бы потребовать файл класса с именем emp.js в котором находится класс emp с методом showSalary.
3. @VanquishedWombat Можно использовать
engine.DocumentSettings.AccessFlags
для включения загрузки из Интернета, файловой системы или обоих. Вы также можете изменитьengine.DocumentSettings.Loader
(или дажеengine.DocumentSettings
себя), но это, вероятно, излишне. Ознакомьтесь с документацией ClearScript по API.