|
111 | 111 |
|
112 | 112 | :else [state]))})) |
113 | 113 |
|
| 114 | +(defn twilio-transport-in-transform |
| 115 | + [{:twilio/keys [handle-event] :as state} _ input] |
| 116 | + (let [data (u/parse-if-json input) |
| 117 | + output (if (fn? handle-event) (handle-event data) nil) |
| 118 | + out-frames (partial merge-with into output)] |
| 119 | + (case (:event data) |
| 120 | + "start" [state (if-let [stream-sid (:streamSid data)] |
| 121 | + (out-frames {:sys-out [(frame/system-config-change {:twilio/stream-sid stream-sid |
| 122 | + :transport/serializer (make-twilio-serializer stream-sid)})]}) |
| 123 | + (out-frames {}))] |
| 124 | + "media" |
| 125 | + [state (out-frames {:out [(frame/audio-input-raw |
| 126 | + (u/decode-base64 (get-in data [:media :payload])))]})] |
| 127 | + |
| 128 | + "close" |
| 129 | + [state (out-frames {:sys-out [(frame/system-stop true)]})] |
| 130 | + nil))) |
| 131 | + |
114 | 132 | (def twilio-transport-in |
115 | 133 | (flow/process |
116 | 134 | {:describe (fn [] {:outs {:sys-out "Channel for system messages that have priority" |
|
123 | 141 | {::flow/in-ports {:twilio-in in-ch} |
124 | 142 | :twilio/handle-event handle-event}) |
125 | 143 |
|
126 | | - :transform (fn [{:twilio/keys [handle-event] :as state} _ input] |
127 | | - (let [data (u/parse-if-json input) |
128 | | - output (if (fn? handle-event) (handle-event data) nil) |
129 | | - out-frames (partial merge-with into output)] |
130 | | - (case (:event data) |
131 | | - "start" (when-let [stream-sid (:streamSid data)] |
132 | | - [state (out-frames {:sys-out [(frame/system-config-change {:twilio/stream-sid stream-sid |
133 | | - :transport/serializer (make-twilio-serializer stream-sid)})]})]) |
134 | | - "media" |
135 | | - [state (out-frames {:out [(frame/audio-input-raw |
136 | | - (u/decode-base64 (get-in data [:media :payload])))]})] |
137 | | - |
138 | | - "close" |
139 | | - [state (out-frames {:sys-out [(frame/system-stop true)]})] |
140 | | - nil)))})) |
| 144 | + :transform twilio-transport-in-transform})) |
0 commit comments