├── .gitignore ├── LICENSE ├── README.md ├── SUMMARY.md ├── _book ├── .gitignore ├── LICENSE ├── about │ └── index.html ├── api │ └── index.html ├── gitbook │ ├── fonts │ │ └── fontawesome │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ ├── gitbook-plugin-anchor-navigation │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── plugin.css │ ├── gitbook-plugin-baiduana │ │ └── baidu_gitbook.js │ ├── gitbook-plugin-fontsettings │ │ ├── fontsettings.js │ │ └── website.css │ ├── gitbook-plugin-highlight │ │ ├── ebook.css │ │ └── website.css │ ├── gitbook-plugin-lunr │ │ ├── lunr.min.js │ │ └── search-lunr.js │ ├── gitbook-plugin-search │ │ ├── lunr.min.js │ │ ├── search-engine.js │ │ ├── search.css │ │ └── search.js │ ├── gitbook-plugin-sharing │ │ └── buttons.js │ ├── gitbook.js │ ├── images │ │ ├── apple-touch-icon-precomposed-152.png │ │ └── favicon.ico │ ├── style.css │ └── theme.js ├── help │ ├── account.html │ ├── error-code.html │ ├── fee.html │ ├── index.html │ ├── sdk.html │ ├── service.html │ ├── sms.html │ └── voice.html ├── index.html ├── search_index.json ├── senior │ ├── charge.html │ ├── dev-console.html │ ├── index.html │ ├── invoice.html │ ├── manage-center.html │ ├── subscribe-interface-status.html │ └── tpl-manage.md └── start │ ├── app-create.html │ ├── app-develop.html │ ├── developer-reg.html │ ├── index.html │ └── test-sms.html ├── about └── index.md ├── api └── index.md ├── book.json ├── help ├── account.md ├── error-code.md ├── fee.md ├── index.md ├── sdk.md ├── service.md ├── sms.md └── voice.md ├── senior ├── charge.md ├── dev-console.md ├── index.md ├── invoice.md ├── manage-center.md ├── subscribe-interface-status.md └── tpl-manage.md └── start ├── app-create.md ├── app-develop.md ├── developer-reg.md ├── index.md └── test-sms.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Node rules: 2 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 3 | .grunt 4 | 5 | ## Dependency directory 6 | ## Commenting this out is preferred by some people, see 7 | ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git 8 | node_modules 9 | 10 | # Book build output 11 | # _book 12 | 13 | # eBook build output 14 | *.epub 15 | *.mobi 16 | *.pdf 17 | *.log 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![阿里大于](http://img.alicdn.com/tps/TB1LLEDKVXXXXXlXpXXXXXXXXXX-346-34.svg) 2 | 3 | # 阿里大于帮助手册 Alidayu Handbook 4 | 5 | > 《阿里大于帮助手册》在线阅读地址: 6 | 7 | - 帮助开发者完成第一条测试短信的发送 8 | - 帮助开发者解决日常开发中遇到的常见问题 9 | 10 | ## 使用说明 Guide 11 | - 本手册源代码托管在[github](https://github.com/alidayu/alidayu-handbook) 12 | - 关于本手册使用过程中遇到的问题,欢迎提[issue](https://github.com/alidayu/alidayu-handbook/issues),我们会尽快完善并更新手册 13 | 14 | ## 手册开发 Develop 15 | - 为支持中文搜索,本手册基于 gitbook cli开发,非基于官方gitbook 16 | - 目前引入的插件支持 17 | - 文档树导航: [gitbook-plugin-anchor-navigation](https://www.npmjs.com/package/gitbook-plugin-anchor-navigation) 18 | - 百度统计: [gitbook-plugin-baiduana](https://www.npmjs.com/package/gitbook-plugin-baiduana) 19 | 20 | ## 快速阅读 Quick Start 21 | 22 | * [关于阿里大于](about/index.md) 23 | * [快速开始](start/index.md) 24 | - [成为开发者](start/developer-reg.md) 25 | - [创建应用](start/app-create.md) 26 | - [应用开发](start/app-develop.md) 27 | - [发送一条测试短信](start/test-sms.md) 28 | * [高级进阶使用](senior/index.md) 29 | - [管理中心](senior/manage-center.md) 30 | - [充值](senior/charge.md) 31 | - [获取发票](senior/invoice.md) 32 | - [开发者控制台](senior/dev-console.md) 33 | - [订阅API返回状态](senior/subscribe-interface-status.md) 34 | * [API](api/index.md) 35 | * [常见问题](help/index.md) 36 | - [资费](help/fee.md) 37 | - [账号](help/account.md) 38 | - [短信](help/sms.md) 39 | - [语音](help/voice.md) 40 | - [SDK](help/sdk.md) 41 | - [错误码](help/error-code.md) 42 | * [人工云客服](help/service.md) -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | * [关于阿里大于](about/index.md) 2 | * [快速开始](start/index.md) 3 | - [成为开发者](start/developer-reg.md) 4 | - [应用创建](start/app-create.md) 5 | - [应用开发](start/app-develop.md) 6 | - [发送一条测试短信](start/test-sms.md) 7 | * [高级进阶使用](senior/index.md) 8 | - [管理中心](senior/manage-center.md) 9 | - [充值](senior/charge.md) 10 | - [获取发票](senior/invoice.md) 11 | - [开发者控制台](senior/dev-console.md) 12 | - [订阅API返回状态](senior/subscribe-interface-status.md) 13 | * [API文档](api/index.md) 14 | * [常见问题](help/index.md) 15 | - [资费](help/fee.md) 16 | - [账号](help/account.md) 17 | - [短信](help/sms.md) 18 | - [语音](help/voice.md) 19 | - [SDK](help/sdk.md) 20 | - [错误码](help/error-code.md) 21 | * [人工云客服](help/service.md) -------------------------------------------------------------------------------- /_book/.gitignore: -------------------------------------------------------------------------------- 1 | # Node rules: 2 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 3 | .grunt 4 | 5 | ## Dependency directory 6 | ## Commenting this out is preferred by some people, see 7 | ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git 8 | node_modules 9 | 10 | # Book build output 11 | # _book 12 | 13 | # eBook build output 14 | *.epub 15 | *.mobi 16 | *.pdf 17 | *.log 18 | -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alidayu/alidayu-handbook/9e630dfe79fae14d7c382d467e872f1263d2a5d1/_book/gitbook/fonts/fontawesome/FontAwesome.otf -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alidayu/alidayu-handbook/9e630dfe79fae14d7c382d467e872f1263d2a5d1/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alidayu/alidayu-handbook/9e630dfe79fae14d7c382d467e872f1263d2a5d1/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alidayu/alidayu-handbook/9e630dfe79fae14d7c382d467e872f1263d2a5d1/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alidayu/alidayu-handbook/9e630dfe79fae14d7c382d467e872f1263d2a5d1/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-anchor-navigation/README.md: -------------------------------------------------------------------------------- 1 | gitbook-plugin-anchor-navigation 2 | ============== 3 | 4 | Add anchor navigation and goto Top to your Gitbook. 5 | 6 | default display: 7 | 8 | ![1](https://cloud.githubusercontent.com/assets/6489688/9081533/9937e2cc-3b8f-11e5-9bfe-2b503303aa2e.JPG) 9 | 10 | hover display: 11 | 12 | ![2](https://cloud.githubusercontent.com/assets/6489688/9081532/990df2aa-3b8f-11e5-9d69-ef71c1371b77.JPG) 13 | 14 | Install in your book using 15 | 16 | ``` 17 | $ npm install --save gitbook-plugin-anchor-navigation 18 | ``` 19 | 20 | Add the plugin to your `book.json`: 21 | 22 | ``` 23 | { 24 | "plugins" : [ "anchor-navigation" ] 25 | } 26 | ``` -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-anchor-navigation/index.js: -------------------------------------------------------------------------------- 1 | 2 | var cheerio = require('cheerio'); 3 | var _ = require('underscore'); 4 | 5 | // insert anchor link into section 6 | var insertAnchors = function(section) { 7 | 8 | var $ = cheerio.load(section.content); 9 | 10 | var array = []; 11 | $(':header').each(function(i, elem) { 12 | 13 | var header = $(elem); 14 | var id = header.attr('id'); 15 | if(id){ 16 | switch(elem.tagName){ 17 | case "h1": 18 | array.push({ 19 | name: header.text(), 20 | url: id, 21 | children: [] 22 | }); 23 | break; 24 | case "h2": 25 | array[array.length-1].children.push({ 26 | name: header.text(), 27 | url: id, 28 | children: [] 29 | }); 30 | break; 31 | case "h3": 32 | array[array.length-1].children[array[array.length-1].children.length-1].children.push({ 33 | name: header.text(), 34 | url: id, 35 | children: [] 36 | }); 37 | break; 38 | default: 39 | break; 40 | } 41 | } 42 | }); 43 | 44 | if(array.length == 0){ 45 | section.content = $.html(); 46 | return; 47 | } 48 | 49 | var html = "
    "; 50 | for(var i=0;i"+array[i].name+""; 52 | if(array[i].children.length>0){ 53 | html += "
      " 54 | for(var j=0;j"+array[i].children[j].name+""; 56 | if(array[i].children[j].children.length>0){ 57 | html += "
        " 58 | for(var k=0;k"+array[i].children[j].children[k].name+""; 60 | } 61 | html += "
      " 62 | } 63 | } 64 | html += "
    " 65 | } 66 | } 67 | html += "
"; 68 | 69 | 70 | section.content = $.html() + html; 71 | 72 | 73 | 74 | }; 75 | 76 | module.exports = { 77 | book: { 78 | assets: ".", 79 | css: [ "plugin.css" ] 80 | }, 81 | hooks: { 82 | "page": function (page) { // before html generation 83 | 84 | _.forEach(page.sections, insertAnchors); 85 | 86 | return page; 87 | } 88 | } 89 | }; -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-anchor-navigation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gitbook-plugin-anchor-navigation", 3 | "description": "Add anchor navigation and goto Top to your Gitbook", 4 | "main": "index.js", 5 | "version": "0.0.1", 6 | "license": "Apache 2", 7 | "author": { 8 | "name": "yaneryou", 9 | "email": "xxdawei@gmail.com" 10 | }, 11 | "engines": { 12 | "gitbook": "*" 13 | }, 14 | "homepage": "https://github.com/yaneryou/gitbook-plugin-anchor-navigation", 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/yaneryou/gitbook-plugin-anchor-navigation.git" 18 | }, 19 | "dependencies": { 20 | "cheerio": "*", 21 | "underscore": "*" 22 | }, 23 | "gitHead": "bc4377cff10608f9ee4cc0a4a96d23c416c88a8d", 24 | "bugs": { 25 | "url": "https://github.com/yaneryou/gitbook-plugin-anchor-navigation/issues" 26 | }, 27 | "_id": "gitbook-plugin-anchor-navigation@0.0.1", 28 | "scripts": {}, 29 | "_shasum": "f2c9247f3c013ad5982931a75f4ef57348c6ec99", 30 | "_from": "gitbook-plugin-anchor-navigation@latest", 31 | "_npmVersion": "2.7.4", 32 | "_nodeVersion": "0.12.2", 33 | "_npmUser": { 34 | "name": "yaneryou", 35 | "email": "xxdawei@gmail.com" 36 | }, 37 | "maintainers": [ 38 | { 39 | "name": "yaneryou", 40 | "email": "xxdawei@gmail.com" 41 | } 42 | ], 43 | "dist": { 44 | "shasum": "f2c9247f3c013ad5982931a75f4ef57348c6ec99", 45 | "tarball": "https://registry.npmjs.org/gitbook-plugin-anchor-navigation/-/gitbook-plugin-anchor-navigation-0.0.1.tgz" 46 | }, 47 | "directories": {}, 48 | "_resolved": "https://registry.npmjs.org/gitbook-plugin-anchor-navigation/-/gitbook-plugin-anchor-navigation-0.0.1.tgz", 49 | "readme": "ERROR: No README data found!" 50 | } 51 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-anchor-navigation/plugin.css: -------------------------------------------------------------------------------- 1 | #anchors-navbar{ 2 | border: 1px solid #ccc; 3 | box-shadow: 5px 5px 2px #ccc; 4 | padding: 5px 10px; 5 | position: fixed; 6 | background-color: #fff; 7 | right: 50px; 8 | top: 68px; 9 | font-size: 12px; 10 | white-space: nowrap; 11 | z-index: 999; 12 | cursor: pointer; 13 | text-align: right; 14 | max-height: 70%; 15 | overflow-y: auto; 16 | overflow-x: hidden; 17 | } 18 | 19 | #anchors-navbar ul{ 20 | display: none; 21 | text-align: left; 22 | padding-right: 10px; 23 | } 24 | 25 | #anchors-navbar:hover ul{ 26 | display: block; 27 | } 28 | 29 | #goTop{ 30 | position: fixed; 31 | right: 50px; 32 | bottom: 68px; 33 | border: 1px solid #ccc; 34 | z-index: 999; 35 | cursor: pointer; 36 | font-size: 12px; 37 | padding: 5px 10px; 38 | box-shadow: 5px 5px 2px #ccc; 39 | background-color: #fff; 40 | color: #333; 41 | } -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-baiduana/baidu_gitbook.js: -------------------------------------------------------------------------------- 1 | require(["gitbook", "jQuery"], function(gitbook, $) { 2 | 3 | var root = (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]); 4 | 5 | gitbook.events.bind("start", function(e, config){ 6 | }); 7 | 8 | gitbook.events.bind("page.change", function(e){ 9 | _hmt.push(['_trackEvent', location.pathname, 'page.change', '', '']); 10 | }); 11 | 12 | }); 13 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js: -------------------------------------------------------------------------------- 1 | require(['gitbook', 'jquery'], function(gitbook, $) { 2 | // Configuration 3 | var MAX_SIZE = 4, 4 | MIN_SIZE = 0, 5 | BUTTON_ID; 6 | 7 | // Current fontsettings state 8 | var fontState; 9 | 10 | // Default themes 11 | var THEMES = [ 12 | { 13 | config: 'white', 14 | text: 'White', 15 | id: 0 16 | }, 17 | { 18 | config: 'sepia', 19 | text: 'Sepia', 20 | id: 1 21 | }, 22 | { 23 | config: 'night', 24 | text: 'Night', 25 | id: 2 26 | } 27 | ]; 28 | 29 | // Default font families 30 | var FAMILIES = [ 31 | { 32 | config: 'serif', 33 | text: 'Serif', 34 | id: 0 35 | }, 36 | { 37 | config: 'sans', 38 | text: 'Sans', 39 | id: 1 40 | } 41 | ]; 42 | 43 | // Return configured themes 44 | function getThemes() { 45 | return THEMES; 46 | } 47 | 48 | // Modify configured themes 49 | function setThemes(themes) { 50 | THEMES = themes; 51 | updateButtons(); 52 | } 53 | 54 | // Return configured font families 55 | function getFamilies() { 56 | return FAMILIES; 57 | } 58 | 59 | // Modify configured font families 60 | function setFamilies(families) { 61 | FAMILIES = families; 62 | updateButtons(); 63 | } 64 | 65 | // Save current font settings 66 | function saveFontSettings() { 67 | gitbook.storage.set('fontState', fontState); 68 | update(); 69 | } 70 | 71 | // Increase font size 72 | function enlargeFontSize(e) { 73 | e.preventDefault(); 74 | if (fontState.size >= MAX_SIZE) return; 75 | 76 | fontState.size++; 77 | saveFontSettings(); 78 | } 79 | 80 | // Decrease font size 81 | function reduceFontSize(e) { 82 | e.preventDefault(); 83 | if (fontState.size <= MIN_SIZE) return; 84 | 85 | fontState.size--; 86 | saveFontSettings(); 87 | } 88 | 89 | // Change font family 90 | function changeFontFamily(configName, e) { 91 | if (e && e instanceof Event) { 92 | e.preventDefault(); 93 | } 94 | 95 | var familyId = getFontFamilyId(configName); 96 | fontState.family = familyId; 97 | saveFontSettings(); 98 | } 99 | 100 | // Change type of color theme 101 | function changeColorTheme(configName, e) { 102 | if (e && e instanceof Event) { 103 | e.preventDefault(); 104 | } 105 | 106 | var $book = gitbook.state.$book; 107 | 108 | // Remove currently applied color theme 109 | if (fontState.theme !== 0) 110 | $book.removeClass('color-theme-'+fontState.theme); 111 | 112 | // Set new color theme 113 | var themeId = getThemeId(configName); 114 | fontState.theme = themeId; 115 | if (fontState.theme !== 0) 116 | $book.addClass('color-theme-'+fontState.theme); 117 | 118 | saveFontSettings(); 119 | } 120 | 121 | // Return the correct id for a font-family config key 122 | // Default to first font-family 123 | function getFontFamilyId(configName) { 124 | // Search for plugin configured font family 125 | var configFamily = $.grep(FAMILIES, function(family) { 126 | return family.config == configName; 127 | })[0]; 128 | // Fallback to default font family 129 | return (!!configFamily)? configFamily.id : 0; 130 | } 131 | 132 | // Return the correct id for a theme config key 133 | // Default to first theme 134 | function getThemeId(configName) { 135 | // Search for plugin configured theme 136 | var configTheme = $.grep(THEMES, function(theme) { 137 | return theme.config == configName; 138 | })[0]; 139 | // Fallback to default theme 140 | return (!!configTheme)? configTheme.id : 0; 141 | } 142 | 143 | function update() { 144 | var $book = gitbook.state.$book; 145 | 146 | $('.font-settings .font-family-list li').removeClass('active'); 147 | $('.font-settings .font-family-list li:nth-child('+(fontState.family+1)+')').addClass('active'); 148 | 149 | $book[0].className = $book[0].className.replace(/\bfont-\S+/g, ''); 150 | $book.addClass('font-size-'+fontState.size); 151 | $book.addClass('font-family-'+fontState.family); 152 | 153 | if(fontState.theme !== 0) { 154 | $book[0].className = $book[0].className.replace(/\bcolor-theme-\S+/g, ''); 155 | $book.addClass('color-theme-'+fontState.theme); 156 | } 157 | } 158 | 159 | function init(config) { 160 | // Search for plugin configured font family 161 | var configFamily = getFontFamilyId(config.family), 162 | configTheme = getThemeId(config.theme); 163 | 164 | // Instantiate font state object 165 | fontState = gitbook.storage.get('fontState', { 166 | size: config.size || 2, 167 | family: configFamily, 168 | theme: configTheme 169 | }); 170 | 171 | update(); 172 | } 173 | 174 | function updateButtons() { 175 | // Remove existing fontsettings buttons 176 | if (!!BUTTON_ID) { 177 | gitbook.toolbar.removeButton(BUTTON_ID); 178 | } 179 | 180 | // Create buttons in toolbar 181 | BUTTON_ID = gitbook.toolbar.createButton({ 182 | icon: 'fa fa-font', 183 | label: 'Font Settings', 184 | className: 'font-settings', 185 | dropdown: [ 186 | [ 187 | { 188 | text: 'A', 189 | className: 'font-reduce', 190 | onClick: reduceFontSize 191 | }, 192 | { 193 | text: 'A', 194 | className: 'font-enlarge', 195 | onClick: enlargeFontSize 196 | } 197 | ], 198 | $.map(FAMILIES, function(family) { 199 | family.onClick = function(e) { 200 | return changeFontFamily(family.config, e); 201 | }; 202 | 203 | return family; 204 | }), 205 | $.map(THEMES, function(theme) { 206 | theme.onClick = function(e) { 207 | return changeColorTheme(theme.config, e); 208 | }; 209 | 210 | return theme; 211 | }) 212 | ] 213 | }); 214 | } 215 | 216 | // Init configuration at start 217 | gitbook.events.bind('start', function(e, config) { 218 | var opts = config.fontsettings; 219 | 220 | // Generate buttons at start 221 | updateButtons(); 222 | 223 | // Init current settings 224 | init(opts); 225 | }); 226 | 227 | // Expose API 228 | gitbook.fontsettings = { 229 | enlargeFontSize: enlargeFontSize, 230 | reduceFontSize: reduceFontSize, 231 | setTheme: changeColorTheme, 232 | setFamily: changeFontFamily, 233 | getThemes: getThemes, 234 | setThemes: setThemes, 235 | getFamilies: getFamilies, 236 | setFamilies: setFamilies 237 | }; 238 | }); 239 | 240 | 241 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-fontsettings/website.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme 1 3 | */ 4 | .color-theme-1 .dropdown-menu { 5 | background-color: #111111; 6 | border-color: #7e888b; 7 | } 8 | .color-theme-1 .dropdown-menu .dropdown-caret .caret-inner { 9 | border-bottom: 9px solid #111111; 10 | } 11 | .color-theme-1 .dropdown-menu .buttons { 12 | border-color: #7e888b; 13 | } 14 | .color-theme-1 .dropdown-menu .button { 15 | color: #afa790; 16 | } 17 | .color-theme-1 .dropdown-menu .button:hover { 18 | color: #73553c; 19 | } 20 | /* 21 | * Theme 2 22 | */ 23 | .color-theme-2 .dropdown-menu { 24 | background-color: #2d3143; 25 | border-color: #272a3a; 26 | } 27 | .color-theme-2 .dropdown-menu .dropdown-caret .caret-inner { 28 | border-bottom: 9px solid #2d3143; 29 | } 30 | .color-theme-2 .dropdown-menu .buttons { 31 | border-color: #272a3a; 32 | } 33 | .color-theme-2 .dropdown-menu .button { 34 | color: #62677f; 35 | } 36 | .color-theme-2 .dropdown-menu .button:hover { 37 | color: #f4f4f5; 38 | } 39 | .book .book-header .font-settings .font-enlarge { 40 | line-height: 30px; 41 | font-size: 1.4em; 42 | } 43 | .book .book-header .font-settings .font-reduce { 44 | line-height: 30px; 45 | font-size: 1em; 46 | } 47 | .book.color-theme-1 .book-body { 48 | color: #704214; 49 | background: #f3eacb; 50 | } 51 | .book.color-theme-1 .book-body .page-wrapper .page-inner section { 52 | background: #f3eacb; 53 | } 54 | .book.color-theme-2 .book-body { 55 | color: #bdcadb; 56 | background: #1c1f2b; 57 | } 58 | .book.color-theme-2 .book-body .page-wrapper .page-inner section { 59 | background: #1c1f2b; 60 | } 61 | .book.font-size-0 .book-body .page-inner section { 62 | font-size: 1.2rem; 63 | } 64 | .book.font-size-1 .book-body .page-inner section { 65 | font-size: 1.4rem; 66 | } 67 | .book.font-size-2 .book-body .page-inner section { 68 | font-size: 1.6rem; 69 | } 70 | .book.font-size-3 .book-body .page-inner section { 71 | font-size: 2.2rem; 72 | } 73 | .book.font-size-4 .book-body .page-inner section { 74 | font-size: 4rem; 75 | } 76 | .book.font-family-0 { 77 | font-family: Georgia, serif; 78 | } 79 | .book.font-family-1 { 80 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 81 | } 82 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal { 83 | color: #704214; 84 | } 85 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal a { 86 | color: inherit; 87 | } 88 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1, 89 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2, 90 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h3, 91 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h4, 92 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h5, 93 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 { 94 | color: inherit; 95 | } 96 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1, 97 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2 { 98 | border-color: inherit; 99 | } 100 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 { 101 | color: inherit; 102 | } 103 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal hr { 104 | background-color: inherit; 105 | } 106 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal blockquote { 107 | border-color: inherit; 108 | } 109 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre, 110 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code { 111 | background: #fdf6e3; 112 | color: #657b83; 113 | border-color: #f8df9c; 114 | } 115 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal .highlight { 116 | background-color: inherit; 117 | } 118 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table th, 119 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table td { 120 | border-color: #f5d06c; 121 | } 122 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr { 123 | color: inherit; 124 | background-color: #fdf6e3; 125 | border-color: #444444; 126 | } 127 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) { 128 | background-color: #fbeecb; 129 | } 130 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal { 131 | color: #bdcadb; 132 | } 133 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal a { 134 | color: #3eb1d0; 135 | } 136 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1, 137 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2, 138 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h3, 139 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h4, 140 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h5, 141 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 { 142 | color: #fffffa; 143 | } 144 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1, 145 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2 { 146 | border-color: #373b4e; 147 | } 148 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 { 149 | color: #373b4e; 150 | } 151 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal hr { 152 | background-color: #373b4e; 153 | } 154 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal blockquote { 155 | border-color: #373b4e; 156 | } 157 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre, 158 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code { 159 | color: #9dbed8; 160 | background: #2d3143; 161 | border-color: #2d3143; 162 | } 163 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal .highlight { 164 | background-color: #282a39; 165 | } 166 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table th, 167 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table td { 168 | border-color: #3b3f54; 169 | } 170 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr { 171 | color: #b6c2d2; 172 | background-color: #2d3143; 173 | border-color: #3b3f54; 174 | } 175 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) { 176 | background-color: #35394b; 177 | } 178 | .book.color-theme-1 .book-header { 179 | color: #afa790; 180 | background: transparent; 181 | } 182 | .book.color-theme-1 .book-header .btn { 183 | color: #afa790; 184 | } 185 | .book.color-theme-1 .book-header .btn:hover { 186 | color: #73553c; 187 | background: none; 188 | } 189 | .book.color-theme-1 .book-header h1 { 190 | color: #704214; 191 | } 192 | .book.color-theme-2 .book-header { 193 | color: #7e888b; 194 | background: transparent; 195 | } 196 | .book.color-theme-2 .book-header .btn { 197 | color: #3b3f54; 198 | } 199 | .book.color-theme-2 .book-header .btn:hover { 200 | color: #fffff5; 201 | background: none; 202 | } 203 | .book.color-theme-2 .book-header h1 { 204 | color: #bdcadb; 205 | } 206 | .book.color-theme-1 .book-body .navigation { 207 | color: #afa790; 208 | } 209 | .book.color-theme-1 .book-body .navigation:hover { 210 | color: #73553c; 211 | } 212 | .book.color-theme-2 .book-body .navigation { 213 | color: #383f52; 214 | } 215 | .book.color-theme-2 .book-body .navigation:hover { 216 | color: #fffff5; 217 | } 218 | /* 219 | * Theme 1 220 | */ 221 | .book.color-theme-1 .book-summary { 222 | color: #afa790; 223 | background: #111111; 224 | border-right: 1px solid rgba(0, 0, 0, 0.07); 225 | } 226 | .book.color-theme-1 .book-summary .book-search { 227 | background: transparent; 228 | } 229 | .book.color-theme-1 .book-summary .book-search input, 230 | .book.color-theme-1 .book-summary .book-search input:focus { 231 | border: 1px solid transparent; 232 | } 233 | .book.color-theme-1 .book-summary ul.summary li.divider { 234 | background: #7e888b; 235 | box-shadow: none; 236 | } 237 | .book.color-theme-1 .book-summary ul.summary li i.fa-check { 238 | color: #33cc33; 239 | } 240 | .book.color-theme-1 .book-summary ul.summary li.done > a { 241 | color: #877f6a; 242 | } 243 | .book.color-theme-1 .book-summary ul.summary li a, 244 | .book.color-theme-1 .book-summary ul.summary li span { 245 | color: #877f6a; 246 | background: transparent; 247 | font-weight: normal; 248 | } 249 | .book.color-theme-1 .book-summary ul.summary li.active > a, 250 | .book.color-theme-1 .book-summary ul.summary li a:hover { 251 | color: #704214; 252 | background: transparent; 253 | font-weight: normal; 254 | } 255 | /* 256 | * Theme 2 257 | */ 258 | .book.color-theme-2 .book-summary { 259 | color: #bcc1d2; 260 | background: #2d3143; 261 | border-right: none; 262 | } 263 | .book.color-theme-2 .book-summary .book-search { 264 | background: transparent; 265 | } 266 | .book.color-theme-2 .book-summary .book-search input, 267 | .book.color-theme-2 .book-summary .book-search input:focus { 268 | border: 1px solid transparent; 269 | } 270 | .book.color-theme-2 .book-summary ul.summary li.divider { 271 | background: #272a3a; 272 | box-shadow: none; 273 | } 274 | .book.color-theme-2 .book-summary ul.summary li i.fa-check { 275 | color: #33cc33; 276 | } 277 | .book.color-theme-2 .book-summary ul.summary li.done > a { 278 | color: #62687f; 279 | } 280 | .book.color-theme-2 .book-summary ul.summary li a, 281 | .book.color-theme-2 .book-summary ul.summary li span { 282 | color: #c1c6d7; 283 | background: transparent; 284 | font-weight: 600; 285 | } 286 | .book.color-theme-2 .book-summary ul.summary li.active > a, 287 | .book.color-theme-2 .book-summary ul.summary li a:hover { 288 | color: #f4f4f5; 289 | background: #252737; 290 | font-weight: 600; 291 | } 292 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-highlight/ebook.css: -------------------------------------------------------------------------------- 1 | pre, 2 | code { 3 | /* http://jmblog.github.io/color-themes-for-highlightjs */ 4 | /* Tomorrow Comment */ 5 | /* Tomorrow Red */ 6 | /* Tomorrow Orange */ 7 | /* Tomorrow Yellow */ 8 | /* Tomorrow Green */ 9 | /* Tomorrow Aqua */ 10 | /* Tomorrow Blue */ 11 | /* Tomorrow Purple */ 12 | } 13 | pre .hljs-comment, 14 | code .hljs-comment, 15 | pre .hljs-title, 16 | code .hljs-title { 17 | color: #8e908c; 18 | } 19 | pre .hljs-variable, 20 | code .hljs-variable, 21 | pre .hljs-attribute, 22 | code .hljs-attribute, 23 | pre .hljs-tag, 24 | code .hljs-tag, 25 | pre .hljs-regexp, 26 | code .hljs-regexp, 27 | pre .hljs-deletion, 28 | code .hljs-deletion, 29 | pre .ruby .hljs-constant, 30 | code .ruby .hljs-constant, 31 | pre .xml .hljs-tag .hljs-title, 32 | code .xml .hljs-tag .hljs-title, 33 | pre .xml .hljs-pi, 34 | code .xml .hljs-pi, 35 | pre .xml .hljs-doctype, 36 | code .xml .hljs-doctype, 37 | pre .html .hljs-doctype, 38 | code .html .hljs-doctype, 39 | pre .css .hljs-id, 40 | code .css .hljs-id, 41 | pre .css .hljs-class, 42 | code .css .hljs-class, 43 | pre .css .hljs-pseudo, 44 | code .css .hljs-pseudo { 45 | color: #c82829; 46 | } 47 | pre .hljs-number, 48 | code .hljs-number, 49 | pre .hljs-preprocessor, 50 | code .hljs-preprocessor, 51 | pre .hljs-pragma, 52 | code .hljs-pragma, 53 | pre .hljs-built_in, 54 | code .hljs-built_in, 55 | pre .hljs-literal, 56 | code .hljs-literal, 57 | pre .hljs-params, 58 | code .hljs-params, 59 | pre .hljs-constant, 60 | code .hljs-constant { 61 | color: #f5871f; 62 | } 63 | pre .ruby .hljs-class .hljs-title, 64 | code .ruby .hljs-class .hljs-title, 65 | pre .css .hljs-rules .hljs-attribute, 66 | code .css .hljs-rules .hljs-attribute { 67 | color: #eab700; 68 | } 69 | pre .hljs-string, 70 | code .hljs-string, 71 | pre .hljs-value, 72 | code .hljs-value, 73 | pre .hljs-inheritance, 74 | code .hljs-inheritance, 75 | pre .hljs-header, 76 | code .hljs-header, 77 | pre .hljs-addition, 78 | code .hljs-addition, 79 | pre .ruby .hljs-symbol, 80 | code .ruby .hljs-symbol, 81 | pre .xml .hljs-cdata, 82 | code .xml .hljs-cdata { 83 | color: #718c00; 84 | } 85 | pre .css .hljs-hexcolor, 86 | code .css .hljs-hexcolor { 87 | color: #3e999f; 88 | } 89 | pre .hljs-function, 90 | code .hljs-function, 91 | pre .python .hljs-decorator, 92 | code .python .hljs-decorator, 93 | pre .python .hljs-title, 94 | code .python .hljs-title, 95 | pre .ruby .hljs-function .hljs-title, 96 | code .ruby .hljs-function .hljs-title, 97 | pre .ruby .hljs-title .hljs-keyword, 98 | code .ruby .hljs-title .hljs-keyword, 99 | pre .perl .hljs-sub, 100 | code .perl .hljs-sub, 101 | pre .javascript .hljs-title, 102 | code .javascript .hljs-title, 103 | pre .coffeescript .hljs-title, 104 | code .coffeescript .hljs-title { 105 | color: #4271ae; 106 | } 107 | pre .hljs-keyword, 108 | code .hljs-keyword, 109 | pre .javascript .hljs-function, 110 | code .javascript .hljs-function { 111 | color: #8959a8; 112 | } 113 | pre .hljs, 114 | code .hljs { 115 | display: block; 116 | background: white; 117 | color: #4d4d4c; 118 | padding: 0.5em; 119 | } 120 | pre .coffeescript .javascript, 121 | code .coffeescript .javascript, 122 | pre .javascript .xml, 123 | code .javascript .xml, 124 | pre .tex .hljs-formula, 125 | code .tex .hljs-formula, 126 | pre .xml .javascript, 127 | code .xml .javascript, 128 | pre .xml .vbscript, 129 | code .xml .vbscript, 130 | pre .xml .css, 131 | code .xml .css, 132 | pre .xml .hljs-cdata, 133 | code .xml .hljs-cdata { 134 | opacity: 0.5; 135 | } 136 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-lunr/lunr.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.12 3 | * Copyright (C) 2015 Oliver Nightingale 4 | * MIT Licensed 5 | * @license 6 | */ 7 | !function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.5.12",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(t){return arguments.length&&null!=t&&void 0!=t?Array.isArray(t)?t.map(function(t){return t.toLowerCase()}):t.toString().trim().toLowerCase().split(/[\s\-]+/):[]},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,o=0;n>o;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",h="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+o+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp("^"+o+i+"[^aeiouwxy]$"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+="e":h.test(n)?(s=g,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:"a",able:"able",about:"about",across:"across",after:"after",all:"all",almost:"almost",also:"also",am:"am",among:"among",an:"an",and:"and",any:"any",are:"are",as:"as",at:"at",be:"be",because:"because",been:"been",but:"but",by:"by",can:"can",cannot:"cannot",could:"could",dear:"dear",did:"did","do":"do",does:"does",either:"either","else":"else",ever:"ever",every:"every","for":"for",from:"from",get:"get",got:"got",had:"had",has:"has",have:"have",he:"he",her:"her",hers:"hers",him:"him",his:"his",how:"how",however:"however",i:"i","if":"if","in":"in",into:"into",is:"is",it:"it",its:"its",just:"just",least:"least",let:"let",like:"like",likely:"likely",may:"may",me:"me",might:"might",most:"most",must:"must",my:"my",neither:"neither",no:"no",nor:"nor",not:"not",of:"of",off:"off",often:"often",on:"on",only:"only",or:"or",other:"other",our:"our",own:"own",rather:"rather",said:"said",say:"say",says:"says",she:"she",should:"should",since:"since",so:"so",some:"some",than:"than",that:"that",the:"the",their:"their",them:"them",then:"then",there:"there",these:"these",they:"they","this":"this",tis:"tis",to:"to",too:"too",twas:"twas",us:"us",wants:"wants",was:"was",we:"we",were:"were",what:"what",when:"when",where:"where",which:"which","while":"while",who:"who",whom:"whom",why:"why",will:"will","with":"with",would:"would",yet:"yet",you:"you",your:"your"},t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){var e=t.replace(/^\W+/,"").replace(/\W+$/,"");return""===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;no;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",h="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+o+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp("^"+o+i+"[^aeiouwxy]$"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+="e":h.test(n)?(s=g,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:"a",able:"able",about:"about",across:"across",after:"after",all:"all",almost:"almost",also:"also",am:"am",among:"among",an:"an",and:"and",any:"any",are:"are",as:"as",at:"at",be:"be",because:"because",been:"been",but:"but",by:"by",can:"can",cannot:"cannot",could:"could",dear:"dear",did:"did","do":"do",does:"does",either:"either","else":"else",ever:"ever",every:"every","for":"for",from:"from",get:"get",got:"got",had:"had",has:"has",have:"have",he:"he",her:"her",hers:"hers",him:"him",his:"his",how:"how",however:"however",i:"i","if":"if","in":"in",into:"into",is:"is",it:"it",its:"its",just:"just",least:"least",let:"let",like:"like",likely:"likely",may:"may",me:"me",might:"might",most:"most",must:"must",my:"my",neither:"neither",no:"no",nor:"nor",not:"not",of:"of",off:"off",often:"often",on:"on",only:"only",or:"or",other:"other",our:"our",own:"own",rather:"rather",said:"said",say:"say",says:"says",she:"she",should:"should",since:"since",so:"so",some:"some",than:"than",that:"that",the:"the",their:"their",them:"them",then:"then",there:"there",these:"these",they:"they","this":"this",tis:"tis",to:"to",too:"too",twas:"twas",us:"us",wants:"wants",was:"was",we:"we",were:"were",what:"what",when:"when",where:"where",which:"which","while":"while",who:"who",whom:"whom",why:"why",will:"will","with":"with",would:"would",yet:"yet",you:"you",your:"your"},t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){var e=t.replace(/^\W+/,"").replace(/\W+$/,"");return""===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n element for each result 48 | res.results.forEach(function(res) { 49 | var $li = $('
  • ', { 50 | 'class': 'search-results-item' 51 | }); 52 | 53 | var $title = $('

    '); 54 | 55 | var $link = $('', { 56 | 'href': gitbook.state.basePath + '/' + res.url, 57 | 'text': res.title 58 | }); 59 | 60 | var content = res.body.trim(); 61 | if (content.length > MAX_DESCRIPTION_SIZE) { 62 | content = content.slice(0, MAX_DESCRIPTION_SIZE).trim()+'...'; 63 | } 64 | var $content = $('

    ').html(content); 65 | 66 | $link.appendTo($title); 67 | $title.appendTo($li); 68 | $content.appendTo($li); 69 | $li.appendTo($searchList); 70 | }); 71 | } 72 | 73 | function launchSearch(q) { 74 | // Add class for loading 75 | $body.addClass('with-search'); 76 | $body.addClass('search-loading'); 77 | 78 | // Launch search query 79 | throttle(gitbook.search.query(q, 0, MAX_RESULTS) 80 | .then(function(results) { 81 | displayResults(results); 82 | }) 83 | .always(function() { 84 | $body.removeClass('search-loading'); 85 | }), 1000); 86 | } 87 | 88 | function closeSearch() { 89 | $body.removeClass('with-search'); 90 | $bookSearchResults.removeClass('open'); 91 | } 92 | 93 | function launchSearchFromQueryString() { 94 | var q = getParameterByName('q'); 95 | if (q && q.length > 0) { 96 | // Update search input 97 | $searchInput.val(q); 98 | 99 | // Launch search 100 | launchSearch(q); 101 | } 102 | } 103 | 104 | function bindSearch() { 105 | // Bind DOM 106 | $searchInput = $('#book-search-input input'); 107 | $bookSearchResults = $('#book-search-results'); 108 | $searchList = $bookSearchResults.find('.search-results-list'); 109 | $searchTitle = $bookSearchResults.find('.search-results-title'); 110 | $searchResultsCount = $searchTitle.find('.search-results-count'); 111 | $searchQuery = $searchTitle.find('.search-query'); 112 | 113 | // Launch query based on input content 114 | function handleUpdate() { 115 | var q = $searchInput.val(); 116 | 117 | if (q.length == 0) { 118 | closeSearch(); 119 | } 120 | else { 121 | launchSearch(q); 122 | } 123 | } 124 | 125 | // Detect true content change in search input 126 | // Workaround for IE < 9 127 | var propertyChangeUnbound = false; 128 | $searchInput.on('propertychange', function(e) { 129 | if (e.originalEvent.propertyName == 'value') { 130 | handleUpdate(); 131 | } 132 | }); 133 | 134 | // HTML5 (IE9 & others) 135 | $searchInput.on('input', function(e) { 136 | // Unbind propertychange event for IE9+ 137 | if (!propertyChangeUnbound) { 138 | $(this).unbind('propertychange'); 139 | propertyChangeUnbound = true; 140 | } 141 | 142 | handleUpdate(); 143 | }); 144 | 145 | // Push to history on blur 146 | $searchInput.on('blur', function(e) { 147 | // Update history state 148 | if (usePushState) { 149 | var uri = updateQueryString('q', $(this).val()); 150 | history.pushState({ path: uri }, null, uri); 151 | } 152 | }); 153 | } 154 | 155 | gitbook.events.on('page.change', function() { 156 | bindSearch(); 157 | closeSearch(); 158 | 159 | // Launch search based on query parameter 160 | if (gitbook.search.isInitialized()) { 161 | launchSearchFromQueryString(); 162 | } 163 | }); 164 | 165 | gitbook.events.on('search.ready', function() { 166 | bindSearch(); 167 | 168 | // Launch search from query param at start 169 | launchSearchFromQueryString(); 170 | }); 171 | 172 | function getParameterByName(name) { 173 | var url = window.location.href; 174 | name = name.replace(/[\[\]]/g, '\\$&'); 175 | var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)', 'i'), 176 | results = regex.exec(url); 177 | if (!results) return null; 178 | if (!results[2]) return ''; 179 | return decodeURIComponent(results[2].replace(/\+/g, ' ')); 180 | } 181 | 182 | function updateQueryString(key, value) { 183 | value = encodeURIComponent(value); 184 | 185 | var url = window.location.href; 186 | var re = new RegExp('([?&])' + key + '=.*?(&|#|$)(.*)', 'gi'), 187 | hash; 188 | 189 | if (re.test(url)) { 190 | if (typeof value !== 'undefined' && value !== null) 191 | return url.replace(re, '$1' + key + '=' + value + '$2$3'); 192 | else { 193 | hash = url.split('#'); 194 | url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, ''); 195 | if (typeof hash[1] !== 'undefined' && hash[1] !== null) 196 | url += '#' + hash[1]; 197 | return url; 198 | } 199 | } 200 | else { 201 | if (typeof value !== 'undefined' && value !== null) { 202 | var separator = url.indexOf('?') !== -1 ? '&' : '?'; 203 | hash = url.split('#'); 204 | url = hash[0] + separator + key + '=' + value; 205 | if (typeof hash[1] !== 'undefined' && hash[1] !== null) 206 | url += '#' + hash[1]; 207 | return url; 208 | } 209 | else 210 | return url; 211 | } 212 | } 213 | }); 214 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-sharing/buttons.js: -------------------------------------------------------------------------------- 1 | require(['gitbook', 'jquery'], function(gitbook, $) { 2 | var SITES = { 3 | 'facebook': { 4 | 'label': 'Facebook', 5 | 'icon': 'fa fa-facebook', 6 | 'onClick': function(e) { 7 | e.preventDefault(); 8 | window.open('http://www.facebook.com/sharer/sharer.php?s=100&p[url]='+encodeURIComponent(location.href)); 9 | } 10 | }, 11 | 'twitter': { 12 | 'label': 'Twitter', 13 | 'icon': 'fa fa-twitter', 14 | 'onClick': function(e) { 15 | e.preventDefault(); 16 | window.open('http://twitter.com/home?status='+encodeURIComponent(document.title+' '+location.href)); 17 | } 18 | }, 19 | 'google': { 20 | 'label': 'Google+', 21 | 'icon': 'fa fa-google-plus', 22 | 'onClick': function(e) { 23 | e.preventDefault(); 24 | window.open('https://plus.google.com/share?url='+encodeURIComponent(location.href)); 25 | } 26 | }, 27 | 'weibo': { 28 | 'label': 'Weibo', 29 | 'icon': 'fa fa-weibo', 30 | 'onClick': function(e) { 31 | e.preventDefault(); 32 | window.open('http://service.weibo.com/share/share.php?content=utf-8&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)); 33 | } 34 | }, 35 | 'instapaper': { 36 | 'label': 'Instapaper', 37 | 'icon': 'fa fa-instapaper', 38 | 'onClick': function(e) { 39 | e.preventDefault(); 40 | window.open('http://www.instapaper.com/text?u='+encodeURIComponent(location.href)); 41 | } 42 | }, 43 | 'vk': { 44 | 'label': 'VK', 45 | 'icon': 'fa fa-vk', 46 | 'onClick': function(e) { 47 | e.preventDefault(); 48 | window.open('http://vkontakte.ru/share.php?url='+encodeURIComponent(location.href)); 49 | } 50 | } 51 | }; 52 | 53 | 54 | 55 | gitbook.events.bind('start', function(e, config) { 56 | var opts = config.sharing; 57 | 58 | // Create dropdown menu 59 | var menu = $.map(opts.all, function(id) { 60 | var site = SITES[id]; 61 | 62 | return { 63 | text: site.label, 64 | onClick: site.onClick 65 | }; 66 | }); 67 | 68 | // Create main button with dropdown 69 | if (menu.length > 0) { 70 | gitbook.toolbar.createButton({ 71 | icon: 'fa fa-share-alt', 72 | label: 'Share', 73 | position: 'right', 74 | dropdown: [menu] 75 | }); 76 | } 77 | 78 | // Direct actions to share 79 | $.each(SITES, function(sideId, site) { 80 | if (!opts[sideId]) return; 81 | 82 | gitbook.toolbar.createButton({ 83 | icon: site.icon, 84 | label: site.text, 85 | position: 'right', 86 | onClick: site.onClick 87 | }); 88 | }); 89 | }); 90 | }); 91 | -------------------------------------------------------------------------------- /_book/gitbook/images/apple-touch-icon-precomposed-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alidayu/alidayu-handbook/9e630dfe79fae14d7c382d467e872f1263d2a5d1/_book/gitbook/images/apple-touch-icon-precomposed-152.png -------------------------------------------------------------------------------- /_book/gitbook/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alidayu/alidayu-handbook/9e630dfe79fae14d7c382d467e872f1263d2a5d1/_book/gitbook/images/favicon.ico -------------------------------------------------------------------------------- /_book/help/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 常见问题 · GitBook 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |

    74 |
    75 | 76 | 77 | 80 | 81 | 82 | 432 | 433 | 434 |
    435 | 436 |
    437 | 438 |
    439 | 440 | 441 | 442 | 451 | 452 | 453 | 454 | 455 |
    456 |
    457 | 458 |
    459 |
    460 | 461 |
    462 | 463 |

    常见问题

    收录了开发者遇到的常见问题,主要有以下几类:

    475 | 476 | 477 |
    478 | 479 |
    480 |
    481 |
    482 | 483 |

    results matching ""

    484 |
      485 | 486 |
      487 |
      488 | 489 |

      No results matching ""

      490 | 491 |
      492 |
      493 |
      494 | 495 |
      496 |
      497 | 498 |
      499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 |
      514 | 515 | 521 |
      522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | -------------------------------------------------------------------------------- /_book/help/sdk.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SDK · GitBook 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
      74 |
      75 | 76 | 77 | 80 | 81 | 82 | 432 | 433 | 434 |
      435 | 436 |
      437 | 438 |
      439 | 440 | 441 | 442 | 451 | 452 | 453 | 454 | 455 |
      456 |
      457 | 458 |
      459 |
      460 | 461 |
      462 | 463 |

      SDK

      持续更新中

      java sdk常见问题

      短信发送接口:无法在创建TaobaoClient对象的时候设置返回参数格式?

      • 缺少common-logging工具包 464 |
      465 |
      TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret,"xml");
      466 |

      短信查询接口:因为page_size值过大报错?

      • page_size可设置最大值为50 467 |
      468 |

      php sdk常见问题

      Fatal error: Class 'TopClient' not found

      • 设置文件和TopSdk.php必须同目录 469 |
      • 470 |
      • php5.3版本以下的,需要手动设置 __DIR__ 变量为全路径 471 |
      472 |

      短信发送接口:请求返回http status code 500

      • 需设置php文件编码为utf-8 473 |
      474 |

      nodejs sdk常见问题

      • 暂无 475 |
      476 | 477 | 478 |
      479 | 480 |
      481 |
      482 |
      483 | 484 |

      results matching ""

      485 |
        486 | 487 |
        488 |
        489 | 490 |

        No results matching ""

        491 | 492 |
        493 |
        494 |
        495 | 496 |
        497 |
        498 | 499 |
        500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 |
        515 | 516 | 522 |
        523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | -------------------------------------------------------------------------------- /_book/help/service.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 人工云客服 · GitBook 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
        72 |
        73 | 74 | 75 | 78 | 79 | 80 | 430 | 431 | 432 |
        433 | 434 |
        435 | 436 |
        437 | 438 | 439 | 440 | 449 | 450 | 451 | 452 | 453 |
        454 |
        455 | 456 |
        457 |
        458 | 459 |
        460 | 461 |

        人工云客服

        点击以下链接即可发起在线咨询

        465 |

        人工云客服

        466 | 467 |
        468 | 469 |
        470 |
        471 |
        472 | 473 |

        results matching ""

        474 |
          475 | 476 |
          477 |
          478 | 479 |

          No results matching ""

          480 | 481 |
          482 |
          483 |
          484 | 485 |
          486 |
          487 | 488 |
          489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 |
          500 | 501 | 507 |
          508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | -------------------------------------------------------------------------------- /_book/senior/charge.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 充值 · GitBook 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
          74 |
          75 | 76 | 77 | 80 | 81 | 82 | 432 | 433 | 434 |
          435 | 436 |
          437 | 438 |
          439 | 440 | 441 | 442 | 451 | 452 | 453 | 454 | 455 |
          456 |
          457 | 458 |
          459 |
          460 | 461 |
          462 | 463 |

          充值

          进入阿里大于>管理中心>账户管理即可进行充值

          image

          • 1元起充,单笔上限设置99万,单天累计500万 464 |
          • 465 |
          • 充值只支持支付宝余额支付(可用非绑定的的任意支付宝余额进行支付),请确保支付宝余额大于等于您想充值的金额 466 |
          • 467 |
          • 充值不会扣您的手续费 468 |
          469 | 470 | 471 |
          472 | 473 |
          474 |
          475 |
          476 | 477 |

          results matching ""

          478 |
            479 | 480 |
            481 |
            482 | 483 |

            No results matching ""

            484 | 485 |
            486 |
            487 |
            488 | 489 |
            490 |
            491 | 492 |
            493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 |
            508 | 509 | 515 |
            516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | -------------------------------------------------------------------------------- /_book/senior/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 高级进阶使用 · GitBook 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
            74 |
            75 | 76 | 77 | 80 | 81 | 82 | 432 | 433 | 434 |
            435 | 436 |
            437 | 438 |
            439 | 440 | 441 | 442 | 451 | 452 | 453 | 454 | 455 |
            456 |
            457 | 458 |
            459 |
            460 | 461 |
            462 | 463 |

            高级进阶使用

            在完成 快速开始 的阅读,并完成 发送第一条测试短信 后,我们可以了解一下阿里大于管理中心的一些常用高级进阶功能。当然,这些高级进阶功能也可以等到你有了具体的使用场景后,再过来仔细阅读。

            管理中心

            • 开发者账号管理、账户充值、获取发票 464 |
            • 465 |
            • 短信、语音服务开通、管理 466 |
            • 467 |
            • 短信、语音使用量查询 468 |
            469 |
            473 |

            开发者控制台

            • 获取SDK 474 |
            • 475 |
            • 应用管理、发布 476 |
            477 |
            479 | 480 | 481 |
            482 | 483 |
            484 |
            485 |
            486 | 487 |

            results matching ""

            488 |
              489 | 490 |
              491 |
              492 | 493 |

              No results matching ""

              494 | 495 |
              496 |
              497 |
              498 | 499 |
              500 |
              501 | 502 |
              503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 |
              518 | 519 | 525 |
              526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | -------------------------------------------------------------------------------- /_book/senior/subscribe-interface-status.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 订阅API返回状态 · GitBook 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
              74 |
              75 | 76 | 77 | 80 | 81 | 82 | 432 | 433 | 434 |
              435 | 436 |
              437 | 438 |
              439 | 440 | 441 | 442 | 451 | 452 | 453 | 454 | 455 |
              456 |
              457 | 458 |
              459 |
              460 | 461 |
              462 | 463 |

              订阅接口返回状态 Subscribe API Status

              1. 进入阿里大于>管理中心>开发者控制台

              2. 进入需要订阅消息的应用

              Image

              3. 进入“消息服务—订阅消息”

              • 找到alibaba_aliqin_FcSmsDR订阅短信发送结果报告,找到alibaba_aliqin_FcCallCdr订阅语音呼叫结果报告 464 |
              465 |

              Image

              466 | 467 |
              468 | 469 |
              470 |
              471 |
              472 | 473 |

              results matching ""

              474 |
                475 | 476 |
                477 |
                478 | 479 |

                No results matching ""

                480 | 481 |
                482 |
                483 |
                484 | 485 |
                486 |
                487 | 488 |
                489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 |
                504 | 505 | 511 |
                512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | -------------------------------------------------------------------------------- /_book/senior/tpl-manage.md: -------------------------------------------------------------------------------- 1 | # 模板管理 2 | 3 | > 正在完成中,敬请期待! -------------------------------------------------------------------------------- /_book/start/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 快速开始 · GitBook 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
                74 |
                75 | 76 | 77 | 80 | 81 | 82 | 432 | 433 | 434 |
                435 | 436 |
                437 | 438 |
                439 | 440 | 441 | 442 | 451 | 452 | 453 | 454 | 455 |
                456 |
                457 | 458 |
                459 |
                460 | 461 |
                462 | 463 |

                快速开始

                快速开始可以帮忙您完成第一条测试短信的发送。

                471 | 472 | 473 |
                474 | 475 |
                476 |
                477 |
                478 | 479 |

                results matching ""

                480 |
                  481 | 482 |
                  483 |
                  484 | 485 |

                  No results matching ""

                  486 | 487 |
                  488 |
                  489 |
                  490 | 491 |
                  492 |
                  493 | 494 |
                  495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 |
                  510 | 511 | 517 |
                  518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | -------------------------------------------------------------------------------- /about/index.md: -------------------------------------------------------------------------------- 1 | ![阿里大于](http://img.alicdn.com/tps/TB1LLEDKVXXXXXlXpXXXXXXXXXX-346-34.svg) 2 | 3 | ![阿里大于](http://img.alicdn.com/tps/TB1wDQtKVXXXXbYXFXXXXXXXXXX-345-33.png) 4 | 5 | # 关于阿里大于 About Alidayu 6 | - [官方网站 http://www.alidayu.com](http://www.alidayu.com) 7 | - 阿里大于专注阿里集团通信保障,同时面向开发者提供通信服务,诚邀您的[入驻](http://www.alidayu.com/settled) 8 | - 入驻即送60元! 9 | 1. 开发者百万资金扶持,送完即止 10 | 2. 代金券次月底失效,全网通用 11 | 3. 产生的所有消费优先扣除代金券 12 | 13 | ## 我们的服务 Our service 14 | - 验证码 15 | - 三网合一短信、语音通道 16 | - 实时、稳定、易用 17 | - **≤0.045元/条** 18 | - 短信通知 19 | - 三网合一专属短信通道 20 | - 支持自定义短信模版 21 | - **≤0.045元/条** 22 | - 语音通知 23 | - 根据通话时长定义通知效果 24 | - 支持动态TTS文本转语音 25 | - **≤0.055元/分钟** 26 | - 多方通话 27 | - 双方接通计费,通话清晰 28 | - 支持自定义来电显号 29 | - **≤0.11元/分钟** 30 | 31 | ## 合作案例 Cooperation Case 32 | 33 | | | 他们也在用 | 34 | | -------- | ----- | 35 | | ![蚂蚁金服](http://img.alicdn.com/tps/TB16UwDJFXXXXbaXFXXXXXXXXXX-131-47.png) | 招财宝结合阿里大于,向客户提供安全可靠的通信环境,致力于实现“让信用等于财富”的愿景。 | 36 | | ![钉钉](http://img.alicdn.com/tps/TB1O5jqJFXXXXaLXFXXXXXXXXXX-101-44.png) | 中小企业通信成本高,多人通话受限,通知响应慢,影响团队沟通效率,与阿里大于合作,采用了免费通话、短信和语音通知的阿里大于开放能力打造出专为中小企业团队的高效沟通软件 | 37 | | ![阿里旅行●去啊](http://img.alicdn.com/tps/TB1ki2oJFXXXXbEXFXXXXXXXXXX-140-18.png) | 阿里大于提供了完整的通信解决方案,语音通高危订单用户,短信通知稳定到达率高,结合私密专线更能有效保护用户隐私不外泄,降低欺诈风险。 | 38 | | ![百世汇通](http://img.alicdn.com/tps/TB1SVbGJFXXXXb.XXXXXXXXXXXX-120-28.png) | 运用阿里大于的无号呼叫能力,百世汇通快递员可以通过扫描条码直拨收件人电话,被叫手机显示企业信息,降低电话拒接率提升收件体验,轻松沟通顺利派件。 | 39 | | ![恒大冰泉](http://img.alicdn.com/tps/TB16GTMJFXXXXXmXXXXXXXXXXXX-97-53.png) | 恒大冰泉一直在营销推广上不断努力,我们选择阿里大于的流量服务推出了“码上淘”活动,成功打造了OTO的新玩法,不止创造了话题也带动了销量。 | 40 | | ![支付宝](http://img.alicdn.com/tps/TB18AwSJFXXXXXyXpXXXXXXXXXX-141-46.png) | 轻松玩游戏,流量赚不完,阿里大于支持支付宝更多红包奖品,让节日推广活动更加缤纷多彩! | 41 | 42 | ## 人工云客服 Online Support 43 | - [售前咨询](http://service.taobao.com/support/minerva/beta_robot_main.htm?sourceId=1625164112) 44 | - [技术支持](http://service.taobao.com/support/minerva/beta_robot_main.htm?sourceId=1625164907) 45 | -------------------------------------------------------------------------------- /api/index.md: -------------------------------------------------------------------------------- 1 | # API文档 2 | 3 | 阿里大于携手淘宝开放平台,无门槛地向开发者提供简洁清晰的API接口、灵活轻便的SDK工具、助力开发者快速集成通信能力、完善产品服务。 4 | 5 | - 支持**JAVA、PHP、Python、.NET、MetaData、C、Nodejs、CURL** 6 | - 淘宝开放平台[SDK与代码示例](http://open.taobao.com/doc2/detail.htm?articleId=101618&docType=1&treeId=1) 7 | 8 | ## 阿里大于通信能力API详细使用说明 About Alidayu Api 9 | 关于API的**`请求参数、响应参数、请求示例、响应示例、异常示例、错误码解释`**可点击以下链接前往API文档中心查看。 10 | 11 | ### 短信 Sms 12 | - [alibaba.aliqin.fc.sms.num.send 短信发送](http://open.taobao.com/doc2/apiDetail?apiId=25450) 13 | - [alibaba.aliqin.fc.sms.num.query 短信发送记录](http://open.taobao.com/doc2/apiDetail.htm?apiId=26039) 14 | 15 | ### 语音 Voice 16 | - [alibaba.aliqin.fc.voice.num.singlecall 语音通知](http://open.taobao.com/doc2/apiDetail?apiId=25445) 17 | - [alibaba.aliqin.fc.tts.num.singlecall 文本转语音通知](http://open.taobao.com/doc2/apiDetail?apiId=25444) 18 | - [alibaba.aliqin.fc.voice.num.doublecall 多方通话](http://open.taobao.com/doc2/apiDetail?apiId=25443) -------------------------------------------------------------------------------- /book.json: -------------------------------------------------------------------------------- 1 | { 2 | "introduction": { 3 | "path": "README.md", 4 | "title": "关于手册" 5 | }, 6 | "keywords": "阿里大鱼,帮助手册,短信,语音,验证码,短信验证码,alidayu,handbook,sms,message,voice", 7 | "tail": { 8 | "阿里大鱼": "http://www.alidayu.com", 9 | "阿里通信": "http://aliqin.tmall.com" 10 | }, 11 | "links": { 12 | "sharing": { 13 | "all": false, 14 | "google": false, 15 | "facebook": false, 16 | "twitter": false, 17 | "weibo": true, 18 | "qq": true, 19 | "qrcode": true 20 | } 21 | }, 22 | "plugins": [ 23 | "anchor-navigation", 24 | "baiduana" 25 | 26 | ], 27 | "pluginsConfig": { 28 | "baidu": { 29 | "token": "e9362ba71bb26d8efe5a1e09630b2ef3" 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /help/account.md: -------------------------------------------------------------------------------- 1 | # 账号 Acount 2 | 3 | ## 1. 我适合使用阿里大于的服务吗? 4 | - 阿里大于向**个人开发者**与**企业开发者**提供专业的通信能力服务,开发者可通过调用阿里大于提供的API或SDK快速集成短信、语音、流量等能力。  5 | - 通过支付宝个人实名认证的用户能够以个人开发者身份入驻,通过支付宝企业实名认证的用户能够以企业开发者身份入驻 [查看个人/企业用户差别 ]() 6 | 7 | ## 2. 个人用户如何升级为企业用户? 8 | - 个人用户**暂不支持**升级为企业用户。  9 | - 若需使用企业级服务,请使用企业账号重新入驻,新入驻的账号无法直接使用原账号的余额、应用与模板。  10 | - 为了便于开发者测试,您可以用个人账号完成入驻,使用代金券测试,体验服务效果。然后使用企业账号正式开发,付费使用。 11 | 12 | ## 3. 如何成为个人开发者? 13 | - 注册淘宝帐号或使用已有的淘宝帐号,完成[入驻阿里大于](http://www.alidayu.com/settled)成功即可成为个人用户。 14 | 15 | ## 4. 如何成为企业开发者? 16 | 1. 通过[支付宝官网注册企业支付宝账号](https://memberprod.alipay.com/account/reg/enterpriseIndex.htm)注册企业支付宝账号并完成企业实名认证,通过实名认证后使用该支付宝账号[入驻阿里大于](http://www.alidayu.com/settled)即可成为企业用户。  17 | 2. 如已有通过支付宝企业实名认证的账号,可直接使用该账号[入驻阿里大于](http://www.alidayu.com/settled)。 18 | 19 | ## 5. 可以使用阿里云/支付宝账号登录吗? 20 | - 可以,阿里大于支持淘宝账号,阿里云账号,支付宝账号登陆并完成入驻。  21 | - 登录时可能需要激活淘宝账号,完成激活后再次登陆即可。 22 | 23 | ## 6. 支付宝账号已经完成企业实名认证,但页面始终提醒未完成企业支付宝认证怎么办? 24 | - 登录[淘宝官网](http://www.taobao.com/)-查看绑定支付宝账户,一般显示的是**未绑定**,将淘宝账号和支付宝账号进行绑定即可。 25 | 26 | ## 7. 在阿里云已经完成企业实名认证,登录大鱼后提示未完成企业支付宝认证怎么办? 27 | - 阿里云支持两种企业实名认证,支付宝或备案;若您完成的是**备案企业实名认证**,您还需要完成支付宝企业实名认证才可以。 28 | 29 | ## 8. 支付宝帐号已实名认证登陆,显示该帐号已在淘宝网注册怎么办? 30 | - 用支付宝登陆淘宝官网-查看已绑定的淘宝帐号-用已绑定的淘宝帐号登陆大鱼即可。 -------------------------------------------------------------------------------- /help/error-code.md: -------------------------------------------------------------------------------- 1 | # 错误码 Error Code Map 2 | 3 | ## 短信 SMS 4 | | 序号 | 错误码 | 错误描述 | 5 | | -------- | ----- | ---- | 6 | | 1 | 12 | 空号 | 7 | | 2 | 002 | 已欠费停机 | 8 | | 3 | 006 | 黑名单 | 9 | | 4 | -103 | 黑名单 | 10 | | 5 | 024 | 用户关机或无法接通 | 11 | | 6 | 059 | 关机 | 12 | | 7 | -131 | 验证码发送频率过高 | 13 | | 8 | 640 | 空号 | 14 | | 9 | -1005 | 敏感词拦截 | 15 | | 10 | DB:0141| 用户处于运营商黑名单 | 16 | | 11 | DB:0142| 超过日最大发送下发短信数量 | 17 | | 12 | mk:0010| 空号 | 18 | 19 | ### alibaba.aliqin.fc.sms.num.send (短信发送) 20 | | 错误码 | 错误描述 | 解决方案 | 21 | | --- | --- | --- | 22 | | isv.OUT_OF_SERVICE | 业务停机 | 登陆www.alidayu.com充值 | 23 | | isv.PRODUCT_UNSUBSCRIBE | 产品服务未开通 | 登陆www.alidayu.com开通相应的产品服务 | 24 | | isv.ACCOUNT_NOT_EXISTS | 账户信息不存在 | 登陆www.alidayu.com完成入驻 | 25 | | isv.ACCOUNT_ABNORMAL | 账户信息异常 | 联系技术支持 | 26 | | isv.SMS_TEMPLATE_ILLEGAL | 模板不合法 | 登陆www.alidayu.com查询审核通过短信模板使用 | 27 | | isv.SMS_SIGNATURE_ILLEGAL | 签名不合法 | 登陆www.alidayu.com查询审核通过的签名使用 | 28 | | isv.MOBILE_NUMBER_ILLEGAL | 手机号码格式错误 | 使用合法的手机号码 | 29 | | isv.MOBILE_COUNT_OVER_LIMIT | 手机号码数量超过限制 | 批量发送,手机号码以英文逗号分隔,不超过200个号码 | 30 | | isv.TEMPLATE_MISSING_PARAMETERS | 短信模板变量缺少参数 | 确认短信模板中变量个数,变量名,检查传参是否遗漏 | 31 | | isv.INVALID_PARAMETERS | 参数异常 | 检查参数是否合法 | 32 | | isv.BUSINESS_LIMIT_CONTROL | 触发业务流控限制 | 短信验证码,使用同一个签名,对同一个手机号码发送短信验证码,允许每分钟1条,累计每小时7条。 短信通知,使用同一签名、同一模板,对同一手机号发送短信通知,允许每天50条(自然日)。 | 33 | | isv.INVALID_JSON_PARAM | JSON参数不合法 | JSON参数接受字符串值。例如{"code":"123456"},不接收{"code":123456} | 34 | 35 | ### alibaba.aliqin.fc.sms.num.query (短信发送记录查询) 36 | | 错误码 | 错误描述 | 解决方案 | 37 | | --- | --- | --- | 38 | | isv.OUT_OF_SERVICE | 业务停机 | 登陆www.alidayu.com 进入管理中心充值 | 39 | | isv.MOBILE_NUMBER_ILLEGAL | 手机号码格式非法 | 使用合法的手机号码 | 40 | | isv.QUERY_DATE_ILLEGAL | 查询时间非法 | 支持近30天记录查询。 | 41 | | isv.SPLIT_PAGE_ILLEGAL | 分页参数不合法 | 每页最大显示50条记录 | 42 | | isv.INVALID_PARAMETERS | 参数异常 | 检查参数合法性 | 43 | | isv.ACCOUNT_NOT_EXISTS | 账户信息不存在 | 入驻阿里大于 | 44 | 45 | ## 语音 Voice 46 | | 状态值 | 状态含义 | 错误描述 | 47 | | -------- | ----- | ---- | 48 | | 200000 | 用户听完语音 | 单呼时用户听完语音 | 49 | | 200001 | 用户提前挂机未完整收听 | 单呼时用户提前挂机,未完整收听语音 | 50 | | 200002 | 用户占线 | 单呼时指用户占线,双呼时指主叫占线 | 51 | | 200003 | 用户收到呼叫但未接听 | 单呼时指用户未接听,双呼时指主叫未接听 | 52 | | 200004 | 用户号码不合法 | 单呼时指用户号码不合法,双呼时指主叫号码不合法 | 53 | | 200005 | 用户无法接通(拒绝) | 单呼时指用户无法接通,双呼时指主叫号码无法接通 | 54 | | 200006 | 语音播放失败铃声格式有误 | 单呼时,指语音格式错误 | 55 | | 200007 | 用户无法接通(不在服务区) | 单呼时指用户无法接通,双呼时指主叫号码无法接通 | 56 | | 200008 | 获取按键超时 | | 57 | | 200010 | 关机 | | 58 | | 200011 | 停机 | | 59 | | 200100 | 呼叫结束(双呼) | 主被叫通话结束 | 60 | | 200101 | 正在接通主叫 | 正在接通主叫 | 61 | | 200102 | 成功接通主叫,正在接通被叫 | 62 | | 200103 | 呼叫建立,正在通话 | 主被叫通话中 | 63 | | 200104 | 主叫号码受限 | 主叫号码受限 | 64 | | 200105 | 被叫号码受限 | 双呼时被叫号码受限 | 65 | | 200111 | 被叫无法接通(拒绝) | 双呼时被叫无法接通(拒绝) | 66 | | 200120 | 被叫无法接通(不在服务区) | 双呼时被叫无法接通(不在服务区) | 67 | | 200112 | 被叫占线 | 双呼时被叫占线 | 68 | | 200105 | 被叫号码受限 | 双呼时被叫号码受限 | 69 | | 200113 | 被叫收到呼叫但未接听 | 双呼时被叫收到呼叫但未接听 | 70 | | 200116 | 被叫号码不合法 | 双呼时被叫号码不合法 | 71 | | 200117 | 来电显示号码不合法 | | 72 | | 9996 | 呼叫未建立或者呼叫已结束(apus) | 查询或终止呼叫时可能返回呼叫未建立或者呼叫已结束(apus) | 73 | | 999999 | 系统错误 | | 74 | | 500 | 运营商错误 | | 75 | | 400 | 网元繁忙 | - | 76 | 77 | ## alibaba.aliqin.fc.voice.num.singlecall (语音通知) 78 | | 错误码 | 错误描述 | 解决方案 | 79 | | --- | --- | --- | 80 | | isv.OUT_OF_SERVICE | 业务停机 | 登陆www.alidayu.com充值 | 81 | | isv.PRODUCT_UNSUBSCRIBE | 产品服务未开通 | 登陆www.alidayu.com开通相应产品服务 | 82 | | isv.ACCOUNT_NOT_EXISTS | 账户信息不存在 | 登陆www.alidayu.com完成入驻 | 83 | | isv.ACCOUNT_ABNORMAL | 账户信息异常 | 联系技术支持 | 84 | | isv.VOICE_FILE_ILLEGAL | 语音文件不合法 | 登陆www.alidayu.com查询审核通过的合法语音文件使用 | 85 | | isv.DISPLAY_NUMBER_ILLEGAL | 号显不合法 | 登陆www.alidayu.com查看合法的号显使用 | 86 | | isv.MOBILE_NUMBER_ILLEGAL | 手机号码格式错误 | 使用合法的手机号 | 87 | | isv.INVALID_PARAMETERS | 参数异常 | 检查参数合法性 | 88 | 89 | ## alibaba.aliqin.fc.tts.num.singlecall (文本转语音通知) 90 | | 错误码 | 错误描述 | 解决方案 | 91 | | --- | --- | --- | 92 | | isv.OUT_OF_SERVICE | 业务停机 | 请登录阿里大于充值 | 93 | | isv.PRODUCT_UNSUBSCRIBE | 未开通产品服务 | 请登录阿里大于开通相应产品服务 | 94 | | isv.ACCOUNT_NOT_EXISTS | 账户信息不存在 | 请登录阿里大于完成入驻 | 95 | | isv.ACCOUNT_ABNORMAL | 账户信息异常 | 请联系技术支持 | 96 | | isv.MOBILE_NUMBER_ILLEGAL | 手机号码格式不合法 | 请使用合法的手机号码 | 97 | | isv.TTS_TEMPLATE_ILLEGAL | 文本转语音模板不合法 | 请使用合法的文本转语音模板。登录www.alidayu.com查看已审核通过的文本转语音模板。 | 98 | | isv.DISPLAY_NUMBER_ILLEGAL | 号显不合法 | 请使用合法的号显。登录www.alidayu.com查询已审核通过的号码 | 99 | | isv.TEMPLATE_MISSING_PARAMETERS | 文本转语音模板参数缺失 | 登录www.alidayu.com查询文本转语音模板,检查模板参数是否漏传。 | 100 | | isv.INVALID_PARAMETERS | 参数异常 | 请检查入参是否合法 | 101 | 102 | ## alibaba.aliqin.fc.voice.num.doublecall (多方通话) 103 | | 错误码 | 错误描述 | 解决方案 | 104 | | --- | --- | --- | 105 | | isv.OUT_OF_SERVICE | 业务停机 | 登陆www.alidayu.com充值 | 106 | | isv.PRODUCT_UNSUBSCRIBE | 产品服务未开通 | 登陆www.alidayu.com开通相应的产品服务 | 107 | | isv.ACCOUNT_NOT_EXISTS | 账户信息不存在 | 登陆www.alidayu.com完成入驻 | 108 | | isv.ACCOUNT_ABNORMAL | 账户信息异常 | 联系技术支持 | 109 | | isv.MOBILE_NUMBER_ILLEGAL | 手机号码不合法 | 使用合法的手机号码 | 110 | | isv.DISPLAY_NUMBER_ILLEGAL | 号显不合法 | 使用合法的号显 | 111 | | isv.INVALID_PARAMETERS | 参数异常 | 检查参数是否合法 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /help/fee.md: -------------------------------------------------------------------------------- 1 | # 1. 资费 2 | 3 | ## 1.1 阿里大于收取哪些费用? 4 | - 阿里大于只收取**通信能力的使用消费**,如发送短信1000条、语音呼叫2000分钟的费用。阿里大于不收取接口调用、发票相关的额外费用。 5 | 6 | ## 1.2 阿里大于的收费方式? 7 | - 阿里大于采用按需付费,**无保底消费**的收费方式。使用阿里大于服务前需要预付充值,产生消费后根据使用量实时扣款。 8 | 9 | ## 1.3 如何充值? 10 | - 进入阿里大于--管理中心--[账户管理](http://www.alidayu.com/admin/user/account)即可进行充值。1元起充,单笔上限设置99万,单天累计500万  11 | - 充值只支持支付宝**余额支付**(可用非绑定的的任意支付宝余额进行支付),充值不会扣您的手续费,请确保支付宝余额大于等于您想充值的金额; 12 | 13 | ## 1.4 各产品的服务资费是多少? 14 | - 阿里大于向开发者提供极具竞争力的**阶梯价**服务资费。  15 | - 实时计费,自动跨档,跨档后当月所有发送量按新阶梯价重新计算。 16 | 17 | # 2. 阶梯价格表 18 | 19 | ## 2.1 短信验证码 & 短信通知 20 | 21 | | **短信使用量阶梯(条/月)** | **单价(元/条)** | 22 | | -------- | ----- | 23 | | 使用量 ≤ 10万条 0.045 元 | 0.045 元 | 24 | | 10万条 < 使用量 ≤ 30万条 | 0.040 元 | 25 | | 30万条 < 使用量 ≤ 50万条 | 0.039 元 | 26 | | 50万条<使用量 ≤ 100万条 | 0.038 元 | 27 | | 100万条<使用量 ≤ 300万条 | 0.037 元 | 28 | | 使用量 > 300万条 | 0.036 元 | 29 | 30 | ## 2.2 语音验证码 & 语音通知 31 | 32 | | **短信使用量阶梯(条/月)** | **单价(元/条)** | 33 | | -------- | ----- | 34 | | 分钟数≤50万 | ¥0.055 | 35 | | 50万<分钟数≤100万 | ¥0.054 | 36 | | 分钟数>100万 | ¥0.052 | 37 | 38 | ## 2.3 多方通话 39 | 40 | | **短信使用量阶梯(条/月)** | **单价(元/条)** | 41 | | -------- | ----- | 42 | | 分钟数≤50万 | ¥0.110 | 43 | | 50万<分钟数≤100万 | ¥0.108 | 44 | | 分钟数>100万 | ¥0.104 | -------------------------------------------------------------------------------- /help/index.md: -------------------------------------------------------------------------------- 1 | # 常见问题 2 | 3 | 收录了开发者遇到的常见问题,主要有以下几类: 4 | - [资费](fee.md) 5 | - [账号](account.md) 6 | - [短信](sms.md) 7 | - [语音](voice.md) 8 | - [SDK](sdk.md) 9 | - [错误码](error-code.md) -------------------------------------------------------------------------------- /help/sdk.md: -------------------------------------------------------------------------------- 1 | # SDK 2 | 3 | > 持续更新中 4 | 5 | ## java sdk常见问题 6 | 7 | ### 短信发送接口:无法在创建`TaobaoClient`对象的时候设置返回参数格式? 8 | - 缺少`common-logging`工具包 9 | 10 | ``` 11 | TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret,"xml"); 12 | ``` 13 | 14 | ### 短信查询接口:因为page_size值过大报错? 15 | - `page_size`可设置最大值为`50` 16 | 17 | ## php sdk常见问题 18 | ### Fatal error: Class 'TopClient' not found 19 | - 设置文件和TopSdk.php必须同目录 20 | - `php5.3`版本以下的,需要手动设置 `__DIR__` 变量为全路径 21 | 22 | ### 短信发送接口:请求返回`http status code 500` 23 | - 需设置php文件编码为`utf-8` 24 | 25 | 26 | ## nodejs sdk常见问题 27 | - 暂无 -------------------------------------------------------------------------------- /help/service.md: -------------------------------------------------------------------------------- 1 | # 人工云客服 2 | 3 | > 点击以下链接即可发起在线咨询 4 | 5 | - [售前咨询](http://service.taobao.com/support/minerva/beta_robot_main.htm?sourceId=1625164112) 6 | - [技术支持](http://service.taobao.com/support/minerva/beta_robot_main.htm?sourceId=1625164907) 7 | 8 | ![人工云客服](http://img.alicdn.com/tps/TB1JhzeMpXXXXXeXXXXXXXXXXXX-938-542.jpg) -------------------------------------------------------------------------------- /help/sms.md: -------------------------------------------------------------------------------- 1 | # 短信 Sms 2 | 3 | ## 1. 短信签名 4 | 5 | ### 1.1 短信签名规范? 6 | - 2-8个字符; 7 | - 不能是纯数字、纯字母、数字和字母的组合; 8 | - 不含违禁关键词,不能有其他特殊符号 9 | 10 | ### 1.2 短信签名报备所需材料? 11 | - 企业营业执照、组织机构代码证、税务登记证 12 | 13 | ### 1.3 短信签名个数限制? 14 | - 提供5个固定签名; 15 | - 企业用户可添加5个自定义签名; 16 | - 个人用户可添加1个自定义签名。 17 | 18 | ### 1.4 短信签名审核和生效时间? 19 | - 短信签名1个工作日审核完成,审核通过后立即生效。 20 | 21 | ### 1.5 短信签名为何要审核? 22 | - 短信由短信签名和短信模板组成,为配合三大运营商的业务要求,同时也可以侧面保证品牌效应,短信在发送时,需签署已经备案的签名。  23 | - 短信示例:【阿里大于】 验证码${number},您正进行支付宝的身份验证,打死不告诉别人! **短信签名为:阿里大于** 24 | 25 | ## 2. 短信模板 26 | 27 | ### 2.1 短信模板的审核周期? 28 | - 1个工作日审核完成。 29 | 30 | ### 2.2 短信模板怎么设置? 31 | - 不支持营销短信; 32 | - 提供7个固定模版;企业&个人用户均可以提交自定义短信模板,个数不限; 33 | - 短信示例:【阿里大于】 验证码${number},您正进行支付宝的身份验证,打死不告诉别人! 34 | - 模板内容为:验证码${number},您正进行支付宝的身份验证,打死不告诉别人! 35 | - “签名”部分不是模板的内容,请勿添加至模板内容中。调用接口的时候,需传“签名”,“模板ID”、“模板变量” 36 | 37 | ## 3. 短信计价方式 38 | 39 | ### 3.1 短信内容计算规则? 40 | - 短信字数=短信模板内容字数 + 签名字数 41 | - 短信字数<=70个字数,按照70个字数一条短信计算 42 | - 短信字数>70个字数,即为长短信,按照67个字数记为一条短信计算 43 | 44 | ### 3.2 短信的计费模式? 45 | 1. 按照实际使用情况进行实时扣费;运营商返回短信发送成功状态才会扣费;若短信发送5分钟后还未返回状态,将先扣费,实际返回状态后根据失败条数进行短信量返补。  46 | 2. 按阶梯计费,用的越多单价越低;月消费金额=月累计短信成功发送量所在的档位*月累计短信发送成功量;  47 | 48 | *举例:1-10万单价是0.045元/条,10-30万单价是0.04元/条,若您当月累计用了15万,则消费金额为15万*0.04元/条* 49 | 50 | ### 3.3 短信发送失败,还是会扣费吗? 51 | - 接口调用失败及运营商返回失败状态,都不会扣费 52 | 53 | ## 4. 短信使用规则咨询 54 | 55 | ### 4.1 短信发送频率上有什么样的限制? 56 | - 短信验证码 57 | - 使用同一个签名,对同一个手机号码发送短信验证码,支持1条/分钟,累计7条/小时 58 | - 短信通知 59 | - 使用同一个签名和同一个短信模板ID,对同一个手机号码发送短信通知,支持50条/日(指自然日) 60 | 61 | ### 4.2 沙箱环境能测试发短信吧?多少条免费的? 62 | - 支持测试,请选择正式环境测试,沙箱环境不能测试,测试环境等于正式环境,故请在正式环境下测试即可。  63 | - 入驻成功会赠送您10元代金券,可用于测试短信或语音,以助您顺利完成。 64 | 65 | ### 4.3 短信显示号码及显号规则 66 | - 手机端接收显示的号码是106开头的正规号码 显号规则: 67 | 1. 号码=通道号+扩展码; 68 | 2. 在通道不稳定、网络抖动及机房断电等不可抗拒的因素下,为确保到达率及到达时间,会自动切换通道,通道号会发生变化。 69 | 70 | ### 4.4 短信提供哪些功能? 71 | - 目前支持短信下行发送、短信状态报告回执、帐单/报表查询等;暂不支持短信上行 72 | 73 | ### 4.5 短信发送成功,但实际未能收到短信是什么原因? 74 | - 原因可能为: 75 | 1. 手机是不是长时间不关机,可以关机重启下 76 | 2. 手机收件箱是不是已满,删除一些看是否可以正常接收 77 | 3. 手机是不是双卡双待的手机,把卡拿出来换一下卡槽 78 | 4. 手机是不是安装了安全软件,安全软件有可能会进行拦截到垃圾信箱里 79 | - 如若不行,请您将SIM卡换到其他手机上进行测试。 80 | 81 | ### 4.6 短信发送状态回执哪里查看? 82 | - 大鱼将主动发送回执信息给您,获取发送状态操作流程: 83 | 1. 前往开发者控制台-应用管理-消息服务-订阅消息(短消息,语音呼叫)-订阅 84 | 2. 开发者需开发客户端接收大鱼推送的回执消息; 85 | - 客户端开发参见[开发指南](http://open.taobao.com/doc2/detail.htm?articleId=101663&docType=1&treeId=2) 86 | 87 | ### 4.7 短信三网都可发送吗,能发送海外/港澳台吗? 88 | - 支持三网发送,目前海外/港澳台暂不支持,敬请期待。 89 | 90 | ### 4.8 短信字数最多能发多少个字? 91 | - 最大支持发送800个字以内的短信。 92 | 93 | ## 5. 技术咨询 94 | 95 | ### 5.1 发送短信验证码为什么数字后面会出现“.0”? 96 | - json格式请使用string类型 97 | 98 | ### 5.2 支持同时发多个手机吗? 99 | - 支持,一次最多可提交200个手机号码;(温馨提示:手机号以英文逗号分开) 100 | 101 | ### 5.3 API调用次数有没有限制? 102 | - 创建应用即可获得100万次的每日调用 103 | 104 | ### 5.4 调用报错 "code":22,"msg":"InvalidMethod" 105 | - 请使用正式环境测试或正常使用, 短信api不支持沙箱 106 | 107 | ### 5.5 调用报错 "code":25,"msg":"Invalid signature" 108 | - 错误原因为无效签名,一般是 appkey appcecret 输入错误,请勿空格。 109 | 110 | ## 6. 短信API错误码 111 | - 错误码详情请参见[SDK>常见错误码>短信](error-code.md#-sms) -------------------------------------------------------------------------------- /help/voice.md: -------------------------------------------------------------------------------- 1 | # 语音 Voice 2 | 3 | ## 1. 语音验证&语音通知常见问题咨询 4 | 5 | ### 1.1 个人用户 6 | - 不支持语音产品服务(无可使用号码) 7 | 8 | ### 1.2 企业用户 9 | - 支持使用语音产品服务 10 | 11 | ### 1.3 是否可以使用自定义号码,号码个数有无限制,外呼号显是多少? 12 | - 大鱼为企业用户提供免费号码和收费号码(以上线为准),自定义号码(以上线为准);  13 | - 免费号码是多人共享,且仅限用于语音验证码产品,语音通知产品;  14 | - 收费号码是专户专享,可用于任意阿里大于语音产品;  15 | - 自定义号码是用户自己提供的400号码,以及提供对应号码归属的相应资质,可以用户阿里大于的语音产品;  16 | - 企业用户限购10个大鱼出售的号码;A路与B路看到的号码显示均为同一个已购买号码。 17 | 18 | ### 1.4 语音验证码可否支持自定义TTS模版? 19 | - 企业用户提供默认TTS模版,同时支持自定义TTS模板,个数不限; 20 | - 默认TTS模版示例: 21 | 1. 您正在进行XXXXXX身份验证,验证码XXXXXX,打死不要告诉别人哦! 22 | 2. 您正在注册成为XXXXXX用户,验证码XXXXXX,感谢您的支持! 23 | 3. 您正在登录XXXXXX,验证码XXXXXX,若非本人操作,请勿泄露。 24 | 4. 您正尝试异地登陆XXXXXX,验证码XXXXXX,若非本人操作,请勿泄露。 25 | 5. 您正在尝试修改XXXXXX登录密码,验证码XXXXXX,请妥善保管账户信息。 26 | 6. 您正在尝试变更XXXXXX重要信息,验证码XXXXXX,请妥善保管账户信息。 27 | 7. 您正在参加XXXXXX的XXXXXX活动,验证码XXXXXX,请确认系本人申请。) 28 | 29 | ## 2. 语音其它服务咨询 30 | 31 | ### 2.1 语音服务流控规则怎样? 32 | - 语音验证码 使用同一个号显,对同一个手机号码发送语音验证码,支持1条/分钟,累计7条/小时 33 | - 语音通知 使用同一个号显,使用同一个TTS模板或语音文件,对同一个手机号码发送语音通知,支持50条/日(指自然日) 34 | 35 | ### 2.2 模板审核时间是多长? 36 | - TTS模板审核为1个工作日,语音文件审核时间为1个工作日 37 | 38 | ### 2.3 语音外呼服务的价格如何? 39 | - 语音外呼业务采用阶梯定价模式,使用越多越便宜。 40 | - 产品单价为阶梯计价模式,月使用分钟数达到某一阶梯,则当月全部使用分钟数均按此阶梯单价 计算总价。 以用户接通为计费起始,按分钟收费,不足1分钟,按1分钟计算。多方通话按双方均接通才会计费,单方接通不计费。 41 | 42 | ### 2.4 如何查看即时发送回执状态及当月使用量? 43 | - 即时查看回执状态:大鱼将主动推送回执信息给您,获取发送状态操作流程: 44 | 1. 开发者控制台-应用管理-消息服务-订阅消息(短消息,语音呼叫)-订阅 45 | 2. 开发者需自行开发客户端接收大鱼推送的回执消息即可查看; 46 | - 客户端开发参见链接 [http://open.taobao.com/doc2/detail.htm?articleId=101663&docType=1&treeId=2](http://open.taobao.com/doc2/detail.htm?articleId=101663&docType=1&treeId=2) 47 | - 当月使用量可于管理中心-帐单查询中查询。 48 | 49 | ### 2.5 语音通知服务,如果用户挂线,会不会重拨? 50 | - 不会重拔 51 | 52 | ### 2.6 语音验证码,如果用户接电话后一直不挂,持续多久会停止播报? 53 | - 系统播报3遍,3遍结束后,会自动停止挂机 54 | 55 | ### 2.7 文本转语音模板提交的验证码数字为1234为什么语音播放是一千二百三十四? 56 | - 阿拉伯数字中间请用英文逗分隔开,应写成1,2,3,4即可 57 | 58 | ### 2.8 独享号码价格为什么不一样? 59 | - 阿里大于与运营商合作,具体资费标准由运营商提供。 60 | 61 | ### 2.9 共享号码和独享号码支持过户吗? 62 | - 均不支持过户 63 | 64 | ### 2.10 一个企业用户最多可以购买多少个号码? 65 | - 一个企业用户最多只能购买10个号码 66 | 67 | ## 3. 语音API错误码 68 | - 错误码详情请参见[SDKSDK>常见错误码>语音](error-code.md#-voice) 69 | 70 | -------------------------------------------------------------------------------- /senior/charge.md: -------------------------------------------------------------------------------- 1 | # 充值 2 | 3 | ## 进入`阿里大于>管理中心>账户管理`即可进行充值 4 | 5 | [![image](http://img.alicdn.com/tps/TB10B4yLVXXXXczXVXXXXXXXXXX-994-398.jpg)](http://img.alicdn.com/tps/TB10B4yLVXXXXczXVXXXXXXXXXX-994-398.jpg) 6 | 7 | - 1元起充,单笔上限设置99万,单天累计500万 8 | - 充值只支持支付宝余额支付(可用非绑定的的任意支付宝余额进行支付),请确保支付宝余额大于等于您想充值的金额 9 | - 充值不会扣您的手续费 -------------------------------------------------------------------------------- /senior/dev-console.md: -------------------------------------------------------------------------------- 1 | # 开发者控制台 Console 2 | 3 | 阿里大于[开发者控制台](http://my.open.taobao.com/)主要为开发者提供应用管理功能,包括以下子功能。 4 | 5 | ## 概览 Sumary 6 | - 查看、重置APP Key / APP Secret 7 | - API调用数据统计 8 | - API权限能力介绍 9 | 10 | ## SDK下载 11 | - 提供以下各个语言版本SDK下载 12 | - JAVA 13 | - PHP 14 | - Python 15 | - .NET 16 | - Metadata 17 | - C 18 | - NodeJS 19 | 20 | ## 应用设置 Setting 21 | - 提供应用基本信息、授权、测试账号绑定、沙箱环境等功能的配置管理 22 | 23 | ## 安全中心 Safe 24 | - 提供应用安全指数、IP白名单、操作日志、敏感操作保护等功能的配置管理 25 | 26 | ## 报表中心 Data 27 | - 提供SPI、API调用详情查询 28 | 29 | ## 消息服务 MSG 30 | - [提供API返回状态订阅服务](subscribe-interface-status.md) 31 | - 提供消息轨迹查询、消息队列概况、TMC连接查询、消息订阅查询一系列运维服务 -------------------------------------------------------------------------------- /senior/index.md: -------------------------------------------------------------------------------- 1 | # 高级进阶使用 2 | 3 | 在完成 [快速开始](../start/index.md) 的阅读,并完成 [发送第一条测试短信](../start/test-sms.md) 后,我们可以了解一下阿里大于管理中心的一些常用高级进阶功能。当然,这些高级进阶功能也可以等到你有了具体的使用场景后,再过来仔细阅读。 4 | 5 | ### [管理中心](manage-center.md) 6 | 7 | > - 开发者账号管理、账户充值、获取发票 8 | > - 短信、语音服务开通、管理 9 | > - 短信、语音使用量查询 10 | 11 | - [充值](senior/charge.md) 12 | - [获取发票](senior/invoice.md) 13 | 14 | ### [开发者控制台](dev-console.md) 15 | > - 获取SDK 16 | > - 应用管理、发布 17 | 18 | - [订阅API返回状态](senior/subscribe-interface-status.md) -------------------------------------------------------------------------------- /senior/invoice.md: -------------------------------------------------------------------------------- 1 | # 获取发票 Invoice 2 | 3 | - 阿里大于通过淘宝账房系统开具合法正规发票,开票内容为“技术服务费”。 4 | - 企业用户可以开具增值税专用发票,个人用户可以开具普通发票。 5 | - 每月10日后可申请上个自然月的发票,每月发票分别开具。 6 | - 发票只开具实际发生金额部分,代金券不能开发票。例如本月充值10000元,使用代金券10元,实际消费金额5000元,故次月10号后申请的发票金额是5000元。 7 | - 发票邮寄方式:`包邮寄送` 8 | 9 | ## 1. 进入`阿里大于>管理中心`,点击开发票,进入账房系统 10 | - 如未产生帐单,开发票按钮暂不展示 11 | 12 | [![Image](http://img.alicdn.com/tps/TB1FHFnKFXXXXbsXVXXXXXXXXXX-1436-721.png)](http://img.alicdn.com/tps/TB1FHFnKFXXXXbsXVXXXXXXXXXX-1436-721.png) 13 | 14 | ## 2. 弹窗提示淘宝对账服务,与开具发票无关,选择暂不授权即可 15 | 16 | [![Image](http://img.alicdn.com/tps/TB1v2a_JVXXXXawXFXXXXXXXXXX-1440-519.png)](http://img.alicdn.com/tps/TB1v2a_JVXXXXawXFXXXXXXXXXX-1440-519.png) 17 | 18 | ## 3. 进入“发票管理—开票管理”,新增发票抬头与邮寄地址 19 | 20 | [![Image](http://img.alicdn.com/tps/TB1N3bNIVXXXXXlXVXXXXXXXXXX-1440-429.png)](http://img.alicdn.com/tps/TB1N3bNIVXXXXXlXVXXXXXXXXXX-1440-429.png) 21 | 22 | ## 4. 进入“发票管理—我申请的发票”未开发票账单中即可申请发票 23 | - 选择“索取新发票”,业务类型选择阿里大于,选择您需要开票的月份 24 | 25 | [![Image](http://img.alicdn.com/tps/TB1blvdJVXXXXaNXpXXXXXXXXXX-1440-460.png)](http://img.alicdn.com/tps/TB1blvdJVXXXXaNXpXXXXXXXXXX-1440-460.png) -------------------------------------------------------------------------------- /senior/manage-center.md: -------------------------------------------------------------------------------- 1 | # 管理中心 Manage 2 | 3 | 阿里大于[管理中心](http://www.alidayu.com/admin/user/account)主要为开发者提供以下功能 4 | 5 | ## 用户中心 User 6 | - [账户管理](http://www.alidayu.com/admin/user/account) 7 | - 查询账户余额、代金券余额 8 | - [充值](charge.md) 9 | - [获取发票](invoice.md) 10 | - 设置余额预警 11 | - 查询账单 12 | - 开通产品服务 13 | - [消息中心](http://www.alidayu.com/admin/user/message) 14 | - 阅读、管理(删除、标记为已读)系统消息(如短信签名审批结果等) 15 | 16 | ## 服务管理 Service Manage 17 | ### 短信 Sms 18 | - [短信签名管理](http://www.alidayu.com/admin/service/sign) 19 | - 添加、删除短信签名 20 | - [短信模板管理](http://www.alidayu.com/admin/service/tpl) 21 | - 添加、删除短信模板 22 | 23 | ### 语音 Voice 24 | - [语音号码管理](http://www.alidayu.com/admin/service/num) 25 | - [语音文件管理](http://www.alidayu.com/admin/service/audio) 26 | - 上传、删除语音文件 27 | - [文件转语音模板管理](http://www.alidayu.com/admin/service/tts) 28 | - 添加、删除文本转语音模板 29 | 30 | ## 业务统计 Statistics 31 | - [语音短信统计](http://www.alidayu.com/admin/business/statistics) 32 | - 查询短信每天、最近7天、最近30天、自定义时间区间的使用情况 33 | - 查询语音单呼、语音双呼每天、最近7天、最近30天、自定义时间区间的使用情况 34 | - 查询短信发送状态 35 | - 查询模板发送量 36 | 37 | - [验证码](http://www.alidayu.com/admin/business/code) 38 | - 查询验证码每天、最近7天、最近30天、自定义时间区间的使用情况 39 | - 查询验证码发送总量、发送成功总量、短信成功发送量、语音成功发送量 40 | - 下载报表 41 | 42 | - [短信通知](http://www.alidayu.com/admin/business/sms-notice) 43 | - 查询短信通知每天、最近7天、最近30天、自定义时间区间的使用情况 44 | - 查询短信通知发送总量、发送成功量、发送失败量 45 | - 查询短信通知发送失败详情 46 | - 查询短信通知发送状态 47 | - 查询模板发送量 48 | - 下载报表 49 | 50 | - [语音通知](http://www.alidayu.com/admin/business/audio-notice) 51 | - 查询语音通知每天、最近7天、最近30天、自定义时间区间的使用情况 52 | - 查询语音通知发送总量、发送成功量、发送失败量 53 | - 查询语音通知发送失败详情 54 | - 查询语音呼叫状态 55 | - 下载报表 56 | 57 | - [多方通话](http://www.alidayu.com/admin/business/double) 58 | - 查询多方通话每天、最近7天、最近30天、自定义时间区间的使用情况 59 | - 查询多方通话总量、成功量、失败量、通话时长(分钟) 60 | - 查询失败详情 61 | - 下载报表 -------------------------------------------------------------------------------- /senior/subscribe-interface-status.md: -------------------------------------------------------------------------------- 1 | # 订阅接口返回状态 Subscribe API Status 2 | 3 | ## 1. 进入`阿里大于>管理中心>开发者控制台` 4 | 5 | ## 2. 进入需要订阅消息的应用 6 | 7 | [![Image](http://img.alicdn.com/tps/TB1dLTcJVXXXXbGXpXXXXXXXXXX-1440-506.png)](http://img.alicdn.com/tps/TB1dLTcJVXXXXbGXpXXXXXXXXXX-1440-506.png) 8 | 9 | ## 3. 进入“消息服务—订阅消息” 10 | - 找到alibaba_aliqin_FcSmsDR订阅短信发送结果报告,找到alibaba_aliqin_FcCallCdr订阅语音呼叫结果报告 11 | 12 | [![Image](http://img.alicdn.com/tps/TB123i.JVXXXXXNXFXXXXXXXXXX-1440-556.png)](http://img.alicdn.com/tps/TB123i.JVXXXXXNXFXXXXXXXXXX-1440-556.png) -------------------------------------------------------------------------------- /senior/tpl-manage.md: -------------------------------------------------------------------------------- 1 | # 模板管理 2 | 3 | > 正在完成中,敬请期待! -------------------------------------------------------------------------------- /start/app-create.md: -------------------------------------------------------------------------------- 1 | # 创建应用 Create 2 | 3 | ## 1. 进入管理中心 4 | [![Image](http://img.alicdn.com/top/i1/LB1ZOprKFXXXXbfXFXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB1ZOprKFXXXXbfXFXXXXXXXXXX) 5 | 6 | ## 2. 选择左侧导航中应用管理中的应用列表,点击创建应用来创建您的第一个应用 7 | [![Image](http://img.alicdn.com/top/i1/LB1K6tqKFXXXXX2XFXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB1K6tqKFXXXXX2XFXXXXXXXXXX) 8 | 9 | ## 3. 在弹窗中输入应用名称,创建应用获得AppKey和Secret 10 | [![Image](http://img.alicdn.com/top/i1/LB13FdzKFXXXXbeXXXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB13FdzKFXXXXbeXXXXXXXXXXXX) 11 | 12 | ## 4. 在应用列表中找到创建成功的应用,进入应用设置,查看AppKey和Secret 13 | [![Image](http://img.alicdn.com/top/i1/LB1Z4XyKFXXXXXiXpXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB1Z4XyKFXXXXXiXpXXXXXXXXXX) 14 | 15 | [![Image](http://img.alicdn.com/top/i1/LB1GLNlKFXXXXXiXVXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB1GLNlKFXXXXXiXVXXXXXXXXXX) -------------------------------------------------------------------------------- /start/app-develop.md: -------------------------------------------------------------------------------- 1 | # 应用开发 Develop 2 | 3 | ## 1. 进入管理中心,在左侧导航栏中找到“应用管理-SDK下载” 4 | - 下载阿里大于SDK,[支持JAVA、PHP、Python、 .NET、 Metadata、 nodejs](http://doc.alidayu.com/doc2/detail.htm?articleId=101618&docType=1&treeId=1) 5 | 6 | [![Image](http://img.alicdn.com/top/i1/LB1jh4sKFXXXXauXFXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB1jh4sKFXXXXauXFXXXXXXXXXX) 7 | 8 | ## 2. 下载sdk,将SDK导入您的应用开发工程 9 | - [SDK下载地址](http://open.taobao.com/doc2/detail.htm?articleId=101618&docType=1&treeId=1) 10 | 11 | ## 3. 在taobao-sdk-java-aoto-source下根据以下路径,找到相应接口文件 12 | 13 | ### java 板本文件夹目录 14 | 15 | [![Image](http://img.alicdn.com/tps/TB1EaGDLVXXXXcuXFXXXXXXXXXX-1114-1384.jpg)](http://img.alicdn.com/tps/TB1EaGDLVXXXXcuXFXXXXXXXXXX-1114-1384.jpg) 16 | 17 | ### .NET板本文件夹目录 18 | 19 | [![Image](http://img.alicdn.com/tps/TB11tWxLVXXXXcwXVXXXXXXXXXX-918-1254.jpg)](http://img.alicdn.com/tps/TB11tWxLVXXXXcwXVXXXXXXXXXX-918-1254.jpg) 20 | 21 | ### PHP板本文件夹目录 22 | 23 | [![Image](http://img.alicdn.com/tps/TB176CPLVXXXXcYXXXXXXXXXXXX-836-836.jpg)](http://img.alicdn.com/tps/TB176CPLVXXXXcYXXXXXXXXXXXX-836-836.jpg) 24 | 25 | ### Python板本文件夹目录 26 | 27 | [![Image](http://img.alicdn.com/tps/TB1dgiPLVXXXXcnXXXXXXXXXXXX-856-918.jpg)](http://img.alicdn.com/tps/TB1dgiPLVXXXXcnXXXXXXXXXXXX-856-918.jpg) 28 | 29 | ## 4. 在[API文档](https://api.alidayu.com/doc2/apiList.htm)中查看调用示例与传参规则 30 | 31 | [![Image](http://img.alicdn.com/tps/TB1sISRLVXXXXbVXXXXXXXXXXXX-1439-717.jpg)](http://img.alicdn.com/tps/TB1sISRLVXXXXbVXXXXXXXXXXXX-1439-717.jpg) -------------------------------------------------------------------------------- /start/developer-reg.md: -------------------------------------------------------------------------------- 1 | # 成为开发者 Registration 2 | 3 | ## 1. 访问阿里大于首页,点击“加入阿里大于” 4 | - 使用淘宝和1688账号(昵称)登录、或者使用支付宝账号(邮箱或手机)、支持阿里云账号(邮箱)登录。  5 | 6 | **注意:您用支付宝/阿里云账号首次登录阿里大于平台时,需激活账号,设置会员名。激活成功后需要重新打开阿里大于网站,重新登陆,然后按提示完成入驻**** 7 | 8 | [![Image](http://img.alicdn.com/top/i1/LB11NpqKFXXXXbQXFXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB11NpqKFXXXXbQXFXXXXXXXXXX) 9 | 10 | ## 2. 通过支付宝实名认证 11 | - 若您的账号未经过支付宝实名认证,请根据提示完成认证。若您的账号已完成认证,请直接前往第3步填写入驻信息。 12 | - 通过支付宝个人认证的用户入驻完成后成为个人开发者,通过支付宝企业认证的用户入驻完成后成为企业开发者。 13 | 14 | [![Image](http://img.alicdn.com/top/i1/LB1VvxhKFXXXXbcXFXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB1VvxhKFXXXXbcXFXXXXXXXXXX) 15 | 16 | ## 3. 填写开发者有效用户信息 17 | 18 | [![Image](http://img.alicdn.com/top/i1/LB1f0BsKFXXXXa5XpXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB1f0BsKFXXXXa5XpXXXXXXXXXX) 19 | 20 | ## 4. 入驻成功 21 | - 可进入快速开始或管理中心。 22 | 23 | [![Image](http://img.alicdn.com/top/i1/LB1hzpaKFXXXXXkaXXXXXXXXXXX)](http://img.alicdn.com/top/i1/LB1hzpaKFXXXXXkaXXXXXXXXXXX) -------------------------------------------------------------------------------- /start/index.md: -------------------------------------------------------------------------------- 1 | # 快速开始 2 | 3 | 快速开始可以帮忙您完成第一条测试短信的发送。 4 | 5 | - [开发者入驻](developer-reg.md) 6 | - [创建应用](app-create.md) 7 | - [应用开发](app-develop.md) 8 | - [测试&发布](app-publish.md) -------------------------------------------------------------------------------- /start/test-sms.md: -------------------------------------------------------------------------------- 1 | # 发送第一条测试短信 Test Sms 2 | 3 | ## 1. 阿里大于SDK短信API调用代码示例 4 | 5 | ### 1.1 请求参数 6 | - 详细请参见[阿里大于短信API-请求参数](http://open.taobao.com/doc2/apiDetail?apiId=25450#s1) 7 | 8 | ### 1.2 开发者请求示例 9 | 10 | - java 11 | 12 | ```java 13 | //引入阿里大于SDK 14 | import com.taobao.api.DefaultTaobaoClient; 15 | import com.taobao.api.request.AlibabaAliqinFcSmsNumSendRequest; 16 | import com.taobao.api.request.AlibabaAliqinFcSmsNumSendResponse; 17 | 18 | //请填写自己的app key,app secret 19 | TaobaoClient client = new DefaultTaobaoClient(url, "your_app_key", "your_app_secret"); 20 | AlibabaAliqinFcSmsNumSendRequest req = new AlibabaAliqinFcSmsNumSendRequest(); 21 | 22 | req.setExtend("123456"); 23 | req.setSmsType("normal"); 24 | req.setSmsFreeSignName("阿里大于"); 25 | req.setSmsParamString("{\"code\":\"888888\",\"product\":\"阿里大于(http://www.alidayu.com)\",\"item\":\"阿里大于\"}"); 26 | //请填写需要接收的手机号码 27 | req.setRecNum("13000000000"); 28 | //短信模板id 29 | req.setSmsTemplateCode("SMS_585014"); 30 | 31 | AlibabaAliqinFcSmsNumSendResponse rsp = client.execute(req); 32 | 33 | System.out.println(rsp.getBody()); 34 | ``` 35 | 36 | - php 37 | 38 | ```php 39 | //引入阿里大于SDK 40 | include "alidayu-openapi-php-sdk/TopSdk.php"; 41 | 42 | $c = new TopClient; 43 | //请填写自己的app key 44 | $c->appkey = "your_app_key"; 45 | //请填写自己的app secret 46 | $c->secretKey = "your_app_secret"; 47 | 48 | $req = new AlibabaAliqinFcSmsNumSendRequest; 49 | $req->setExtend("123456"); 50 | $req->setSmsType("normal"); 51 | $req->setSmsFreeSignName("阿里大于"); 52 | $req->setSmsParam("{\"code\": \"888888\", \"product\": \"阿里大于(http://www.alidayu.com)\"}"); 53 | //请填写需要接收的手机号码 54 | $req->setRecNum("your_phone_number"); 55 | //短信模板id 56 | $req->setSmsTemplateCode("SMS_645006"); 57 | 58 | $resp = $c->execute($req); 59 | 60 | ``` 61 | 62 | - nodejs 63 | - 待补充 64 | 65 | 66 | ### 1.3 阿里大于服务端返回示例 67 | 68 | - 成功 69 | 70 | ```js 71 | { 72 | "alibaba_aliqin_fc_sms_num_send_response":{ 73 | "result":{ 74 | "err_code":"0", 75 | "model":"134523^4351232", 76 | "success":false, 77 | "msg":"成功" 78 | } 79 | } 80 | } 81 | ``` 82 | 83 | - 失败 84 | 85 | ```js 86 | { 87 | "error_response":{ 88 | "code":50, 89 | "msg":"Remote service error", 90 | "sub_code":"isv.invalid-parameter", 91 | "sub_msg":"非法参数" 92 | } 93 | } 94 | ``` 95 | 96 | - 详细请参见[阿里大于短信API-响应参数](http://open.taobao.com/doc2/apiDetail?apiId=25450#s2) 97 | 98 | ### 1.4 错误码解释 99 | - 详细请参见[阿里大于短信API-错误码解释](http://open.taobao.com/doc2/apiDetail?apiId=25450#s6) 100 | 101 | ### 1.5 常用开发工具 102 | - [API测试工具](http://open.taobao.com/apitools/apiTools.htm?catId=20711&apiId=25450&apiName=alibaba.aliqin.fc.sms.num.send&scopeId=) 103 | - [错误code查询](http://open.taobao.com/apitools/errorCodeSearch) --------------------------------------------------------------------------------