Skip to content

Latest commit

 

History

History
352 lines (290 loc) · 27.8 KB

CHANGELOG.md

File metadata and controls

352 lines (290 loc) · 27.8 KB
  • Bugfix: No longer confound start and stop beeps on record commands (#220)
  • Bugfix: Ensure DTMF recognisers get shut down when finishing
  • Bugfix: Hangup reason on Asterisk was :hangup, should be :hungup. See the Rayo spec.
  • Feature: Support language, sensitivity and minimum confidence on UniMRCP-based ASR on Asterisk
  • Feature: Support sending messages to calls (eg SIP MESSAGE) on Asterisk
  • Bugfix: Rayo events should not include their timestamp in comparison. This is not useful in applications, and makes testing more difficult.

Note: 2.4.1 was not released due to a tagging mishap. Its contents was released as 2.4.2.

  • Feature: Add support for requesting calls with a specific URI
  • Feature: Allow generation of a random call URI for a client
  • Feature: Rayo events should be timestamped with dispatch or receipt time (#213)
  • Bugfix: Ensure commands can be associated on the wire even before they're executed
  • Bugfix: Ensure a command is always transitioned to is requested state prior to receiving a response
  • Feature: Add input-timers-started event
  • Feature: Allow client to send XMPP messages through Blather
  • Bugfix: Ensure that max duration expiration of Asterisk recordings does not crash the translator when it extends past the call's destruction
  • Bugfix: Delay sending Answered event on call until AsyncAGI is invoked
  • Bugfix: Punchblock::Event::Complete::Reason is now a Punchblock::Event
  • Feature: Support Rayo CPA and Fax specifications
  • Feature: Implement a simple filter for AMI events -> Rayo events in Punchblock::Translator::Asterisk.event_filter=
  • Feature: Output on Asterisk supports a new :native_or_unimrcp renderer which allows for fallback of output rendering from Asterisk native when possible, to a TTS engine when it's not.
  • Feature: Support output repeat-times on Asterisk.
  • Bugfix: Remove per-call/component actors from Asterisk translator for performance/stability super-charge
  • Bugfix: Allow sending string SSML docs via Rayo
  • Bugfix: Ensure that joined calls on Asterisk do not have implicitly linked lifecycles. Previously, joinees would be hungup when the joiner exited the bridge.
  • Feature: Support RubySpeech builtin grammars on Asterisk and FreeSWITCH
  • Update: Update to stable release of Virtus
  • Bugfix: Reject commands against components which have finished on Asterisk, and garbage collect them
  • Bugfix: Register/lookup components by their full URI rather than component ID since the component ID may only be unique per call
  • Bugfix: Hold back Virtus dependency to avoid API-breaking changes
  • Bugfix: Allow audio file URIs with file extensions on Asterisk
  • Bugfix: Input timers were being started before output finished on Asterisk composed prompts
  • Bugfix: Input initial timers were being started on Asterisk composed prompts even if the prompt was barged
  • Bugfix: Output was being interrupted on Asterisk composed prompts at every DTMF keypress, even if the output was already finished
  • Feature: Compliance with v0.2 of the published Rayo spec (http://xmpp.org/extensions/xep-0327.html)
  • Feature: Add support for Rayo Prompt component
  • Feature: Added FS support for initial timeout and final timeout on Record
  • Change: Models are now plain ruby objects, not XML nodes, and are imported from/exported to XML when necessary for communicating over XMPP.
  • Change: #headers and AMI #attributes now do not have their names modified. A header of 'Call-ID' will no longer be modified to :call_id.
  • Change: AMI Events/Actions now have #headers(=) rather than #attributes(=)
  • Change: Remove event queue
  • Change: Removed media_engine and default_voice settings
  • Bugfix: Reconnect dead Asterisk streams correctly
  • Bugfix: Include AMI response text_body in AMI component complete events
  • Bugfix: Avoid crashing translators (Asterisk or FreeSWITCH) by instructing them to call back to terminated Call objects
  • Bugfix: Detect MRCPSynth failure in output component
  • Bugfix: Handle AMI errors indicating dead channels correctly
  • Bugfix: Finish more setup before sending output ref on Asterisk
  • Bugfix: Allow early media TTS on Asterisk in addition to audio playback
  • Bugfix: Correctly mark Asterisk calls as answered after successfully executing an answer command
  • Bugfix: Improve error messages when trying to execute stop commands on components in an invalid state
  • Bugfix: We were raising an exception on connection shutdown due to waiting for the connection to end incorrectly.
  • Bugfix/Perf: FreeSWITCH Call actors were being kept alive after hangup for no reason
  • Bugfix/Perf: FreeSWITCH component complete events were looping out of the actor
  • Perf: We were wasting CPU cycles listening to all ES events when we really don't need to
  • Bugfix: AMI errors indicating dead channels were not being handled correctly
  • Bugfix: We were broken on Celluloid 0.14 due to changes in block execution semantics between actors
  • Feature: Use RubyAMI 2.0 with a single AMI connection.
  • Feature: Cache channel variables on Asterisk calls.
  • Feature: Allow optional sending of end event when breaking from AsyncAGI on Asterisk. This enables dialplan handback. Only triggers if the channel variable 'PUNCHBLOCK_END_ON_ASYNCAGI_BREAK' is set.
  • Bugfix: Avoid DTMF recognizer failures and race conditions by bringing DTMFRecognizer back into the Input component actor.
  • Bugfix: Catch Asterisk AMI errors in all cases and fail accordingly, instead of ploughing ahead in the face of adversity.
  • Bugfix: Improve performance of Asterisk implementation by no longer spinning up a component actor for AGI command execution.
  • Bugfix: Input initial timeout was being set as a float rather than an integer
  • Bugfix: Input initial timeout was being set as a float rather than an integer
  • Bugfix: FreeSWITCH was requiring a from attribute on a dial command
  • Bugfix: Asterisk translator now properly checks for existence of the recordings directory
  • Bugfix: Components should transition state before unblocking
  • Bugfix: Asterisk joins are now more robustly responded to when the join begins
  • Bugfix: On FreeSWITCH, only events relating to bridge start/end should be delivered to bridged calls
  • Bugfix: On FreeSWITCH, a voice value on an audio-only output component should not prevent execution
  • Bugfix: XMPP Ping should be an IQ get, not set
  • Bugfix: Stop command should be in Rayo ext namespace
  • Bugfix: XMPP specs were mistakenly resetting the logger object for other tests.
  • CS: Avoid Celluloid deprecation warnings
  • Feature: Join command now enforces a list of valid direction attribute values
  • Feature: Added support for media direction to the Record component
  • Feature: Record direction support on FS
  • Bugfix: Fixed answering during early media on FS
  • Bugfix: Doing multiple recordings on Asterisk during the lifetime of a call was crashing Punchblock
  • Bugfix: Deal with nil media engines on FS/* properly
  • Feature: Support for the renderer attribute added to the Output component.
  • Feature: FreeSWITCH and Asterisk translators now use the :renderer attribute on Output
  • Bugfix: Fixed scenario where executing the ANSWER application on FreeSWITCH on an already answered call caused FS to stop accepting commands.
  • Bugfix: Plug a severe memory leak
  • Bugfix: Raise an error immediately if trying to execute an invalid media engine on Asterisk
  • Bugfix: Handle a wider variety of types when configuring media engines on Asterisk and FreeSWITCH, such as Strings instead of Symbols
  • Bugfix: Safer component attribute writer conversion
  • Feature: Set dial headers on FreeSWITCH originate command (SIP only)
  • Feature: Set dial headers on Asterisk originate command (SIP only)
  • Bugfix: Headers were being re-written downcased and with underscores
  • Bugfix: Ensure all numeric component attributes are written as the correct type
  • Doc: Add link to docs for unrenderable doc error
  • Bugfix: Use correct GRXML content type
  • Bugfix: Fix UniMRCP for documents containing commas
  • Bugfix: Bump Celluloid dependency to avoid issues with serialising AMI
  • Update: Bump Celluloid dependency
  • Bugfix: Input grammars referenced by URL now no longer specify a content type
  • Bugfix: FreeSWITCH Dial#from values now parsed more flexibly
  • Feature: Input component now supports grammar URLs
  • Bugfix: Hanging up Asterisk calls now correctly specifies normal clearing cause
  • Doc: Fix a bunch of API documentation
  • Bugfix: Cleaning up DTMF handlers for input components with a dead call should not crash on FreeSWITCH
  • Bugfix: Reduced a race condition on FreeSWITCH when dispatching events from calls to dead components
  • Bugfix: Events relevant to bridged channels were not being routed to the call
  • Bugfix: Components using #stop_by_redirect now return an error response if stopped when they are complete
  • Bugfix: Hold back ruby_ami and ruby_fs dependencies pending fixes for Celluloid 0.12.0
  • Feature: FreeSWITCH support (mostly complete, experimental, proceed with caution)
  • Bugfix: Report the correct caller ID in offers from Asterisk
  • Bugfix: Strip out caller ID name from dial commands on Asterisk
  • Change: Asterisk output now uses Playback rather than STREAM FILE
  • Feature: The recordings dir is now checked for existence on startup, and logs an error if it is not there. Asterisk only.
  • Feature: Punchblock now logs an error if it was unable to add the redirect context on Asterisk on startup.
  • Feature: Output component now exposes #recording and #recording_uri for easy access to record results.
  • Feature: Early media support for Asterisk, using Progress to start an early media session
  • Feature: Output component on Asterisk now supports early media. If the line is not answered, it runs Progress followed by Playback with noanswer.
  • Feature: Record component on Asterisk now raises if called on an unanswered call
  • Feature: Input component on Asterisk works the same whether the call is answered or unanswered
  • Feature: AMI events are emitted to the relevant calls
  • Feature: Simpler method of getting hold of a new client/connection
  • Bugfix: AMI events are processed in order by the translator
  • Bugfix: Asterisk calls and components are removed from registries when they die
  • Bugfix: Commands for unknown calls/components respond with the correct :item_not_found name
  • Bugfix: AMI events relevant to a particular call are emitted by that call to the client
  • Bugfix: Asterisk calls send an error complete event for their dying components
  • Bugfix: Asterisk translator sends an error end event for its dying calls
  • Bugfix: Use the primitive version of AGI ANSWER, rather than an app
  • Bugfix: Outbound calls which never begin progress on Asterisk end with an error
  • Bugfix: Asterisk now responds correctly to unjoin commands
  • Bugfix: Allow nil reject reasons
  • Bugfix: Asterisk translator now does NOT answer the call automatically when Output, Input or Record are used.
  • Feature: Basic support for record component on Asterisk, using MixMonitor. Currently unsupported options include: start_paused, initial_timeout, final_timeout. Hints are additionally not supported, and recordings are stored on the * machine's local filesystem.
  • Feature: Implement Reject on Asterisk
  • Bugfix: No longer generate warnings
  • Bugfix: Set 'to' attribute on an offer from Asterisk to something useful if the dnid is 'unknown'
  • Bugfix: Include caller ID name in 'from' attribute on an offer from Asterisk
  • Bugfix: Removed media engine switching on Asterisk Input component - fixes broken input when using app_swift or unimrcp for output
  • Update: Better dependency version fixing
  • Stable release :D
  • Bugfix: Any issue in compiling an output document into executable elements on Asterisk should return an unrenderable doc error
  • API Change: #call_id and #mixer_name attributes changed to #target_call_id and #target_mixer_name
  • API Change: #other_call_id attributes changed to #call_id to better align with Rayo
  • Feature: Input & Output components on Asterisk now responds to a Stop command
  • Feature: started/stopped-speaking events are now handled
  • Bugfix: Asterisk output component considers an SSML doc w/ a string node w/o spaces to be a filename
  • Bugfix: ProtocolError should behave like a normal exception, just with extra attributes
  • Feature: app_swift is now supported on Asterisk with a media_engine type of :swift
  • Feature: Asterisk calls now support the Join API
  • Feature: On Asterisk, Punchblock creates a context and extension to redirect calls to
  • Bugfix: Unjoining calls now redirects both legs
  • Bugfix: Unlink events on Asterisk correctly send Unjoin Punchblock events
  • Bugfix: The Asterisk translator now ignores calls to 'h' or of type 'Kill'
  • Bugfix: Handle more XMPP connection errors gracefully
  • Bugfix: The XMPP connection ready event is now available to external handlers
  • Bugfix: The Asterisk connection now passes the :media_engine option down to the translator
  • Bugfix: Connections now always respond to #connected?
  • Bugfix: Connection termination handled gracefully on Asterisk
  • Feature: Asterisk calls receiving media commands are implicitly answered
  • Bugfix: Unrenderable output documents on Asterisk should return a sensible error
  • Bugfix: Log the target of commands correctly
  • Bugfix: Do not wrap exceptions in ProtocolError
  • Bugfix: Closing an disconnected XMPP connection is a no-op
  • Bugfix: Remove the rest of the deprecated Tropo components (conference)
  • Feature: Outbound dials on Asterisk now respect the dial timeout
  • Bugfix: Registering stanza handlers on an XMPP connection now sets them in the correct order such that they do not override the internally defined handlers
  • Bugfix: End, Ringing & Answered events are allowed to have headers
  • Feature: Dial commands may have an optional timeout
  • Feature: Return an error when trying to execute a command for unknown calls/components or when not understood
  • Feature: Log calls/translator shutting down
  • Feature: Calls and components should log their IDs
  • Feature: Components marked as internal should send events directly to the component node
  • Bugfix: Fix Asterisk Call and Component logger IDs
  • Bugfix: Fix a stupidly high log level
  • Bugfix: AGI commands executed by a call/component that are a translation of a Rayo command should be marked internal
  • Bugfix: Asterisk components should sent events via the connection
  • Bugfix: Shutting down an asterisk connection should do a cascading shutdown of the translator and all of its calls
  • Bugfix: Component actors should be terminated once they've sent a complete event
  • Bugfix: Component events should be sent with the call ID
  • Bugfix: AMIAction components do not have a call
  • Bugfix: Add test coverage for comparison of complete events
  • Bugfix: A call being hung up should terminate the call actor
  • Bugfix: Fix a mock expectation error in a test
  • Feature: Support outbound dial on Asterisk
  • Bugfix: Asterisk hangup causes should map to correct Rayo End reason
  • Feature: Support DTMF Input components on Asterisk
  • Feature: Expose Blather's connection timeout config when creating a Connection::XMPP
  • Bugfix: Remove some deprecated Tropo extension components
  • Bugfix: Remove reconnection logic since it really belongs in the consumer
  • Feature: Raise a DisconnectedError when a disconnection is detected
  • Feature: Allow sending commands to mixers easily
  • Feature: Allow configuration of Rayo XMPP domains (root, call and mixer)
  • Feature: Log Blather messages to the trace log level
  • Feature: Return an error when trying to execute an Output on Asterisk with unsupported options set
  • Feature: Add basic support for media output via MRCPSynth on Asterisk
  • API change: Rename mixer_id to mixer_name to align with change to Rayo
  • Bugfix: Handle and expose RubySpeech GRXML documents on Input/Ask properly
  • Bugfix: Compare ProtocolErrors correctly
  • Bugfix: Asterisk media output should default to Asterisk native output (STREAM FILE)
  • Bugfix: An Output node's default max_time value should be nil rather than zero
  • [FEATURE] Add Connection#not_ready!, to instruct the server not to send any more offers.
  • [BUGFIX] Translate all exceptions raised by the XMPP connection into a ProtocolError
  • [UPDATE] Blather dependency to >= 0.5.9
  • Bugfix: Some spec mistakes
  • Feature: Allow execution of actions against global components on Asterisk
  • API change: The console has been removed
  • API change: Components no longer expose a FutureResource at #complete_event, and instead wrap its API in the same way as #response and #response=. Any consumer code which does some_component.complete_event.resource or some_component.complete_event.resource= should now use some_component.complete_event and some_component.complete_event=
  • Feature: Added the max-silence attribute to the Input component
  • Bugfix: Bump the Celluloid dependency to avoid spec failures on JRuby and monkey-patching for mockability
  • API change: Event handlers registered on components are no longer triggered by incoming events internally to Punchblock. These events must be consumed via a Client's event handlers or event queue and manually triggered on a component using ComponentNode#trigger_event_handler

Feature: Added basic support for running Punchblock apps on Asterisk. Calls coming in to AsyncAGI result in the client receiving an Offer, hangup events are sent, and accept/answer/hangup commands work.

API change: The logger is now set using Punchblock.logger= rather than as a hash key to Connection.new

  • Feature: Allow instructing the connection we are ready. An XMPP connection will send initial presence with a status of 'chat' to the rayo domain
  • Bugfix: When running on Asterisk, two FullyBooted events will now trigger a connected event
  • Bugfix: No longer ignore offers from the specified rayo domain on XMPP connections
  • Feature: Tag all event objects with the XMPP domain they came from
  • API change: Punchblock consumers now need to instantiate both a Connection and a Client (see the punchblock-console gem for an example)
  • Feature: Added a Connection for Asterisk, utilising RubyAMI to open an AMI connection to Asterisk, and allowing AMI actions to be executed. AMI events are handled by the client event handler.
  • Deprecation: The punchblock-console and the associated DSL are now deprecated and the punchblock-console gem should be used instead

API change: Connections now raise a Punchblock::Connection::Connected instance as an event, rather than the class itself

  • Refactoring/API change: Client and connection level concerns are now separated, and one must create a Connection to be passed to a Client on creation. Client now has the choice between an event queue and guarded event handlers.
  • Feature: Support for meta-data on recordings (size & duration)
  • Feature: Allow specifying all of Blather's setup options (required to use PB as an XMPP component)
  • Bugfix: Rayo events are discarded if they don't come from the specified domain
  • Bugfix: Component execution in the sample DSL now doesn't expect events on the main queue
  • Bugfix: Conference complete event was not being handled
  • Feature/API change: Components no longer have an event queue, but instead it is possible to define guarded event handlers via #register_event_handler

v0.4.0

  • First public release