云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

文件存储_复联1百度云资源_企业0元试用

小七 141 0

腾讯服务器_便宜的_云主机是什么意思

我最近搬到多伦多去了。搬到大城市意味着我要从一栋房子搬到一栋公寓楼里。这是我第一次有了一个内线电话让我的客人进入大楼。我从渥太华地区搬到这里,这意味着我原来的电话号码从技术上讲是长途电话。现在我不想更改我的电话号码,物联网水表,因为我在我的大多数网络帐户上都启用了2FA,这样我就可以使用它了。长途电话费已经不存在于手机上了,但问题是他们在我的大楼里为企业电话使用的系统无法拨打长途电话。系统的另一个限制是我们只能在系统中有一个条目。虽然这对大多数人来说都是可以的,在我做技术传道者的工作和我的妻子空姐之间,但很多时候我们家里只有一个人。考虑到所有这些,我们的建筑经理建议我们买一个基本的固定电话线,我们只能用在室内电话上。当然,但那有什么意思?介绍Nexmo在这一年中,我有机会在各种各样的会议上与Nexmo的同事见面,所以这感觉是一个完美的机会,可以利用他们的平台进行一番讨论。Nexmo的平台提供了一套全面的工具和体验,允许开发人员以编程方式控制分配给您帐户的虚拟电话号码。从那里,你可以打电话,发送短信,或者,最重要的是,控制什么时候接到电话。我的第一个想法是建立一个网站,在这个网站上我可以决定从Enterphone发出的电话将被转发到哪个号码。我没有找到任何真正简单的方法。此外,它还增加了一个复杂的问题,淘客平台,下载返利,即每次我妻子或我自己出差回来或去上班的时候,都必须更换电话转接给的人。我终于找到了一种创建对话的方法,基本上是一个电话会议。我决定构建一个无服务器的函数来应答对我的Nexmo号码的调用。如果打那个号码的人是Enterphone,我会同时拨我和我妻子的手机,让每个人都参加一个电话会议。这样,我们都会接到电话,我们中的任何一个都可以为客人开门。设置无服务器终结点因为我不想被任何服务器设置所困扰,所以我决定使用网络任务.io,一个允许您构建无服务器端点的平台,也称为函数即服务。这使我很容易建立一个节点.js函数来回答我的呼叫。我继续创建了我的Webtask。然后,我复制了这个无服务器端点的URL,并将其粘贴为我的Nexmo应用程序中的"应答URL"。当我在Nexmo仪表板中时,我复制了以下内容:API密钥API机密应用程序ID私钥作为我的Webtask中的常量。我还为Webtask添加了一个常量,因为我将在后面的代码中使用它。最后,物联网水表,我还添加了一组电话号码作为常量,以便以后更容易阅读代码。涉及的电话号码是我自己的手机(JOEL_号码)、我妻子的电话(NATACHA_号码)、Enterphone(Enterphone_号码)以及最后我的Nexmo虚拟号码(Nexmo_号码)。const API_KEY="APIKEY";const API_SECRET="机密";const APP_ID="APPID";const JOEL_NUMBER="12345678901";const NATACHA_NUMBER="12345678901";const NEXMO_NUMBER="12345678901";const ENTERPHONE_NUMBER="12345678901";const ANSWER_URL="https://wt-13aebf4eeaa9913542725d4a90e4d49e-0.sandbox.auth0-extend.com/enterphone-inbound";const PRIVATE_KEY_CONTENTS="----开始私钥----"+"…"+"----结束私钥----";模块.导出=函数(上下文,cb){cb(空,resp);};注意:为了简单起见,我在代码中直接使用了我的私钥,但它应该存储在服务器上,这应该是文件本身的URL。处理电话现在我所有的常量都定义好了,现在是时候编写处理调用的代码了。为了创建对话,我可以使用NCCO(Nexmo Call Control Object)。NCCO是以JSON格式返回到nexmoapi的指令。当一个呼叫进入虚拟号码时,我可以从我的Webtask返回以下JSON来创建一个电话会议。模块.导出=函数(上下文,cb){设ncco=[];ncco.push公司({"action":"对话","name":"enterphone"});cb(空,ncco);};现在每个拨入这个号码的人都将连接到名为"enterphone"的对话。如果我知道有人要来,那就可以了,但我需要一直连接到会议号码。这对我想要完成的任务来说不太方便。下一步是核实是谁打来的。如果是Enterphone,它会从Nexmo虚拟号码呼叫两部手机。这样,当他们接电话时,他们就被连接到电话会议上。为了调用这些数字,我使用了nexmoapi的npm库。在我的Webtask的顶部,我导入了npm模块。const Nexmo=需要('Nexmo');我还从设置的"NPM模块"部分将模块添加到我的Webtask中。然后,在main函数中,我添加了调用这两个数字的代码。nexmo.calls.create({收件人:[{type:'电话',编号:JOEL_编号}],发件人:{type:'电话',号码:下一个号码},答案网址:[答案网址]});因为两部手机拨打两个号码的配置完全相同(很明显,除了号码之外),我添加了一个quick helper函数来生成配置对象:函数调用选项(数字){返回{收件人:[{type:'电话',数字:数字}],发件人:{type:'电话',号码:下一个号码},机器探测:"挂断",答案网址:[答案网址]}}然后我加上了两个号码的代码:nexmo.calls.create(买入期权(JOEL_号码));nexmo.calls.create(看涨期权(NATACHA_号码));正在测试我的设置当我测试这个调用时,我意识到我已经将整个系统送入一个无限循环。每次调用这两个号码中的一个,serverless函数都会再次拨打这两个号码,然后再拨打这两个号码,依此类推……最后我用自己的语音信箱留言,让我留言。为了解决这个问题,我需要修改这个代码,使它只在来自Enterphone的呼叫时调用两个手机。我的代码现在是这样的:const Nexmo=需要('Nexmo');//定义数字//定义API密钥//定义应答URL函数调用选项(数字){返回{收件人:[{type:'电话',数字:数字}],发件人:{type:'电话',号码:下一个号码},答案网址:[答案网址]}}模块.导出=函数(上下文,cb){设ncco=[];//当内线电话打这个号码时,拨乔尔和娜塔莎如果(上下文.data.from==输入电话号码){const nexmo=新nexmo({API密钥:API密钥,apiSecret:阿皮密,applicationId:APP_ID,privateKey:(PRIVATE_KEY_内容),});nexmo.calls.create(买入期权(JOEL_号码));nexmo.calls.create(看涨期权(NATACHA_号码));}//在这两种情况下,继续添加连接到电话会议ncco.push公司({"action":"对话","name":"enterphone"});cb(空,ncco);};它很管用,但是…代码现在起作用了。我可以在我的虚拟号码上使用这个代码来让我的Enterphone正常工作。它呼叫我们的两个电话号码,我们都可以拨"9"来打开前门。所有这些都是相当容易的,没有很多配置,但现在我有一些小问题。首先,当我们中的一个没接电话时,另一个电话的语音信箱会连接到电话会议上,记录下谈话内容,然后默哀一分钟。在内线电话里听到"嗨,你已经联系到乔尔的语音信箱了",这也很奇怪。另一个问题是实际启动电话会议所需的时间。从Enterphone启动呼叫需要几秒钟,然后Nexmo虚拟号码会无声地应答并拨入我们,然后我们会在响铃几声后接听。所有这些都会导致有人在接听电话前保持30秒的沉默。我们当然可以做得更好。避开语音信箱在我最近的一次会议上,我实际上遇到了一位来自Nexmo的开发者提倡者。事实证明,避免语音信箱其实很简单。我要做的就是给我的nexmo.call.create方法。因为我使用了一个helper函数,所以只需添加以下内容:机器探测:"挂断",…到callOptions函数返回的对象中。这会告诉Nexmo当它检测到应答的是一台机器时挂断。问题解决了!修复漫长的等待所有的等待都有点尴尬,当你拨通企业电话,你只是站在入口处。但我们无能为力,对吧?所有的等待时间都是一种必要的邪恶。总是关于感觉。这种等待只会让你感觉很长,因为你看着一个空白的屏幕,听着一些沉默。为了帮助解决这个问题,我给我的NCCO添加了一个新条目。当来电号码是Enterphone时,微博淘客,我添加了以下内容:ncco.push公司({"action":"说话","text":"呼叫乔尔和娜塔莎"});这样,在楼下等候的人在打电话给我们的手机之前,实际上听到了对讲机的声音。这无疑有助于我们理解"有什么事情发生了吗?"。一点奖金当我在处理这个代码时,我接到了一个垃圾邮件电话号码,这个号码是连接到我的Enterphone的。那些太烦人了。如果我有固定电话,我就无能为力了。但多亏了互联网的魔力,加上一点JavaScript,我只需在函数开始时检查调用方是谁并拒绝调用:让authorizedNumbers=[下一个号码,乔尔号码,不适用